猿问

如下代码,请问题目的运行结果是什么?可以详细的讲一讲吗?

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();
}

噜噜哒
浏览 261回答 3
3回答

芜湖不芜

这个是讲java的继承,汽车是大类,奔驰也是属于汽车,所以也有汽车的所有的特性,只是质量啊什么的一些不同(奇瑞也是汽车,但是和奔驰不同把,但他们又都是汽车),Benz这个类继承Car这个累,并重写run方法Car car = (Car)( new Benz() );这个是子类可以像上转型,我们可以说奔驰是汽车,但是不可以说汽车是奔驰,创建了一个Benz的对象后调用run方法

万千封印

这样的程序是有问题的,修改如下:public class Car {public void run(){System.out.println("汽车在跑");}public static void main(String[] args) {Car car = (Car)( new Benz() );car. run();}}class Benz extends Car {public void run(){System.out.println("奔驰在跑");}}或者这样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();}}如果是这样,程序结果为:奔驰在跑

白衣非少年

结果是奔驰在跑,这个是JAVA多态中的一种方法——声明父类创建子类,有的书上称之为子类对象的上转型对象,也就是将一个子类创建的对象赋值给父类声明的对象,此时如果这个上转型对象调用了被子类重写的方法,那么等同于子类对象调用这个方法,也就是执行的是子类重写后的新方法。上题中子类Benz重写了父类的方法run,所以将子类创建的对象new Benz()赋值给父类声明的对象car之后调用run方法得到的结果是奔驰在跑
随时随地看视频慕课网APP
我要回答