java中,子类继承父类之后,覆盖了原有方法,那么调用新的方法的时候,二者都调用吗?

classCarextendsVehicle{publicCar(){System.out.println("AnewCar.");}publicvoiddrive(){... class Car extends Vehicle {
public Car() {
System.out.println("A new Car.");
}
public void drive() {
System.out.println("Car is driven");
}
public static void brake() {
System.out.println("Car is braked");
}
}

public class Vehicle {
class Bus extends Vehicle {
public Bus() {
System.out.println("A new Bus.");
}
public void drive() {
System.out.println("Bus is driven");
}
}

public Vehicle() {
System.out.println("A new Vehicle.");
}

public void drive() {
System.out.println("Vehicle is driven");
}

public static void brake() {
System.out.println("Vehicle is braked");
}

对上边的这个程序, 运行下边两个语句:
Vehicle vc = new Car();
Bus vb = new Bus();
Bus vb = new Bus();的结果是
A new Vehicle.
A new Bus.
这个还可以理解。。但是为什么 Vehicle vc = new Car();的结果是

A new Vehicle.
A new Vehicle.
A new Car.
展开
 我来答
yangfan5157
2012-06-08 · 超过30用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:108万
展开全部
把Bus类定义到Vehicle类外面,这样运行就对了。
class Car extends Vehicle {
public Car() {
System.out.println("A new Car.");
}
public void drive() {
System.out.println("Car is driven");
}
public static void brake() {
System.out.println("Car is braked");
}
}
class Bus extends Vehicle {
public Bus() {
System.out.println("A new Bus.");
}
public void drive() {
System.out.println("Bus is driven");
}
}
class Vehicle {
public Vehicle() {
System.out.println("A new Vehicle.");
}

public void drive() {
System.out.println("Vehicle is driven");
}

public static void brake() {
System.out.println("Vehicle is braked");}
}
class Test{
public static void main(String[] args){
Vehicle vc = new Car();
Bus vb = new Bus();

}
}
追问
bus那个放在里边也可以编译通过的说。。话说放在里边和外边有什么不同呀?觉得放在里边怪怪的。。。不过也没报错…………

又话说为什么Vehicle vc = new Car()可以编译通过呢?是不是所有的父类子类都可以这样定义?
追答
Vehicle vc = new Car()这个是java的多态,这样定义当然对了。所有的父类子类都可以。
莔囧冏冋冂
2012-06-08 · TA获得超过642个赞
知道小有建树答主
回答量:411
采纳率:100%
帮助的人:545万
展开全部
构造方法和普通方法不一样,构造方法在创建对象时候调用,而子类的构造方法中会自动调用父类的构造方法。
追问
额,我发现我看错了, Vehicle vc = new Car()输出是
A new Vehicle.
A new Car.
没有调用两次。。。

话说为什么Vehicle vc = new Car()可以编译通过呢?是不是所有的父类子类都可以这样定义?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式