gpt4 book ai didi

java - 将对象声明为其父类(super class)与其类之间的区别?

转载 作者:行者123 更新时间:2023-12-01 13:51:33 25 4
gpt4 key购买 nike

我已经阅读了 java 书中的继承部分,并尝试了以下示例作为练习:

public class Car {
private int wheels;
private int doors;
public Car(int initWheels, int initDoors){
wheels = initWheels;
doors = initDoors;
}
public int getWheels(){
return wheels;
}
public int getDoors(){
return doors;
}

protected int calculateMaterials(){
return wheels + doors;
}
}
<小时/>
public class Ford extends Car{
private String color;
private String type;
private int horsePower;
public Ford(int initWheels, int initDoors, String initColor, String initType, int initHorsePower){
super(initWheels, initDoors);
color = initColor;
type = initType;
horsePower = initHorsePower;
}
public String getColor(){
return color;
}
public String getType(){
return type;
}

protected int calculateMaterials(){
return getWheels() + getDoors() + horsePower;
}
}

主要:

public class Main {
public static void main(String [] args){
Car car = new Car(4,4);
Car myCar = new Ford(6,2,"black", "pickup", 2);
System.out.println(myCar.getWheels());
System.out.println(myCar.calculateMaterials());
}
}

然而,在重新查看代码后,我开始质疑自己这是否可能:Car myCar = new Ford(6,2,"black", "pickup", 2); . 。 。我运行它并看到输出完全相同,现在我想知道是否是这样:

Car myCar = new Ford(6,2,"black", "pickup", 2);

还有这个

Ford myCar = new Ford(6,2,"black", "pickup", 2);

同样的事情,如果是的话,哪一个更可取或更常见?如果不是,我怎么会得到相同的输出?

最佳答案

问题是您将引用类型声明为 Car 您将从中得到我认为所需的结果

Ford myCar = new Ford(6,2,"black", "pickup", 2);

有几个人提出了一个好观点,即您实际上并没有重载构造函数。这确实是更大的问题。仅当顶级类和继承类的构造函数具有相同的参数时,才会真正发生构造函数的重载。因此,只要包含五个参数,您总是会调用 Ford 构造函数

关于java - 将对象声明为其父类(super class)与其类之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com