Java中方法传参为子类对象时为什么会调用父类的变量?

package TestPack;

class Fruit {
String name = "Fruit";

public void show() {
System.out.println("show fruit");
}
}

class Apple extends Fruit{
String name = "Apple";
public void show() {
System.out.println("show apple");
}
}

class Method{
public void method(Fruit f) {
System.out.println(f.name);
}
public void methood(Fruit f) {
f.show();
}
}

public class Demo{
public static void main(String[] args) {
new Method().method(new Fruit()); // 输出:Fruit
new Method().method(new Apple()); // 输出:Fruit

new Method().methood(new Fruit()); // 输出:show fruit
new Method().methood(new Apple()); // 输出:show apple
}
}

如上面代码,为什么第二个输出语句不是Apple??难道不是调用子类new Apple()的name变量吗?

这是继承里面的知识,可以在实例里面体会

例子如下:

public class Test {// 测试类r

public static void main(String[] args) throws IOException {

B b = new B();

}

}

class A{

public A() {

System.out.println("A类的无参数构造方法");

}

}

class B extends A{

public B() {

//这里面不写,系统也会默认的调用super(),即父类的无参构造。

//不管子类的无参构造还是有参构造

System.out.println("B类的无参数构造方法");

}

}

追问

谢谢你回答,虽然没有解决我的问题,但是还是很感谢!我已经自己解决了!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-05
老哥你是怎么解决的 这是怎么回事啊 新手求教

(防ping必)这是继承里面的知识bai,可以在实例里du面体会
//这里bai面不写,系统也会默认的du调用super(),即父类的无参构造。

//不管子类的无参构造还是有参构造
相似回答