再一条java问题

来源:百度知道 编辑:UC知道 时间:2024/05/08 15:15:56
public class Car {
public void run(){
System.out.println("汽车在跑");
}
}
public class Benz extends Car {
public void run(){
System.out.println("奔驰在跑");
}
}
public static void main(String[] args) {
Car car = (Car)( new Benz() );
car. run();
}
怎么输出的是"奔驰在跑",Car car = (Car)( new Benz() ); 后面那句不是把benz变成了car了吗?是不是方法覆盖了就覆盖了 所以才输出那句 ?这样说假如benz有一个 size属性,Car car = (Car)( new Benz() )后car对象有没有size这个属性?

子父类中只要出现方法的重写,无论是用父类去new一个子类对象,还是单独的子类对象,那么调用的永远就是重写后的方法。

lz没有看到Benz extends Car 这句吗
这个就是继承的意思 然后父类的方法很子类的方法都是相同的 这个就是方法的重写 关于重写 我有必要说下
重写是发生在多个类之间的 而且这些类之间要是"父子"关系
假如现在父类有一个方法 子类重写了 那么注意下面几点:
1.如果父类的方法不是private的 那么子类都是可以重写的 不然报错
2.子类重写父类的方法必须要做到三点
a.方法名相同
b.参数相同
c.返回值相同
可见这些都与重写有关

那么子类重写了父类的方法 那么在 父类 a=new 子类();时
a.方法名()调用的就是子类的方法的具体实现 但有一种情况还是调用的是
父类的 那就是子类的方法是private

你后面测试的方法没必要那么写撒
Car car = new Benz();
car.run();
这样就可以了撒。
这也是属于一个多态的实现。。
父类的变量 可以引用任何子类的对象
至于你后面说的那个 确实是没有的。
除非你把他向下转型。。。

首先奔驰是继承Car的,所以,如果benz有size属性,那你出来的car就是奔驰了。这个是java中的多态,楼主,这是一种知识概念的理解,看你新手能不能理解。
其实我可以这样和你解释:
纠正一下,当Car car = new Benz();的时候,是用奔驰车给这辆车挂上了牌。那么出场后,这辆车就是Benz的,和Benz car = new Benz();是一样的。
这个知识点是java语言中很重的,多态。
即子类可以给父类的对象实例化,调用该对象方法即调用子类继承父类的方法:(奔驰在跑)
当然如果还有一个类也是集成Car,例如叫做Lamborghini
那么Car car = new Lamborghini();之后
car.run();的结果就是“兰博基尼在跑”