为了账号安全,请及时绑定邮箱和手机立即绑定

关于多层继承的问题,有代码。(多层继承是我自己想出来的词,不知道恰不恰当~)

//先看代码
//创建一个父类
public class Plant{
 String color;
 String kind;
 private int age;
 public void eat(){
   System.out.println("有的植物可以被食用,比如香蕉。");
 }
}
//创建子类
public class Banana extends Plant{

}
//创建运行类
public class Run{
public static void main(String[] args){
 Banana banana=new Banana();
  banana.color="yellow";
  banana.kind="fruit";
  banana.eat();
  System.out.println("香蕉的颜色是"+banana.color);
  System.out.println("香蕉的种类是"+banana.kind);
}
}
//运行结果:
//有的植物可以被食用。
//香蕉的颜色是yellow
//香蕉的种类是fruit
//再创建一个Banana的子类
public Hello extends Banana{

}
//再创建一个运行类
public class Run2{
public static void main(String[] args){
 Hello hello=new Hello();
 hello.eat();
 System.out.println(hello.color);
 System.out.println(hello.kind);
}
}
//运行结果:
//有的植物可以被食用。
//null
//null

为什么Hello类作为Banana的子类却不能继承Banana的属性和方法(显然eat方法是继承Plant);
课程里说Java只能单继承,我创建的Hello类是Banana的子类,却继承了Plant类的属性和方法,这是不是有两个父类呢?
望高手解答,谢谢!


正在回答

2 回答

public class Run2{
public static void main(String[] args){
 Hello hello=new Hello();  
 hello.eat();
 //你并没有调用父类方法的color和kind啊,而且也没有给这个属性赋初始值,就默认为null了。
 //你只是在run中的main方法中给Banana赋值了,对Hello并没有影响。
 //你在这里输入hello.color="test"; hello.kind="test"就好了,或者给Plant的两个属性赋一个初始值。
 System.out.println(hello.color);
 System.out.println(hello.kind);
}
}


0 回复 有任何疑惑可以回复我~
#1

_Jack_Han_ 提问者

非常感谢!
2016-01-07 回复 有任何疑惑可以回复我~
#2

_Jack_Han_ 提问者

Hello作为Banana的子类,调用Banana的属性也需要在前面加上类名吗?子类不是可以直接继承父类属性的值吗?
2016-01-07 回复 有任何疑惑可以回复我~
#3

_Jack_Han_ 提问者

我明白了,属性的初始值我是在Run类里定义的,虽然是通过Banana的对象,但是Banana的类里是空的,所以Hello什么都没继承到。谢谢你。但是为什么Hello可以继承Plant的eat()方法呢?Hello是Banana的子类。
2016-01-07 回复 有任何疑惑可以回复我~
#4

Its_forever 回复 _Jack_Han_ 提问者

是的。如果Banana里面有一个where(产地)的属性。 public class Banana extends Plant{ String where ="China"; } 那么在main方法中: Hello hello=new Hello(); hello.where ="American"; System.out.println(hello.where); //输出American 如果没有 hello.where ="American";这句,输出China。这样就是子类直接继承了父类属性的值。
2016-01-07 回复 有任何疑惑可以回复我~
#5

Its_forever 回复 _Jack_Han_ 提问者

Hello可以继承Plant的eat()方法是因为Hello虽然是Banana的直接子类。但是Banana继承了Plant。所以Hello也就间接的继承了Plant。 相当于,Banana继承了Plant,Banana就拥有了Plant除了private的所有属性和方法。 Hello继承了Banana也就拥有了Banana除了private的所有属性和方法(其中包括了从Plant那儿继承而来的东西)。
2016-01-07 回复 有任何疑惑可以回复我~
#6

慕仰9290566

Plant是banna的父类,那子类肯定会继承父类除了私有的都继承下来,那虽然子类banna是空的,但它继承了父类的就拥有了父类的属性和方法啊,然后hello继承banna,hello也是会把banna的除私有的全继承啊,Plant是hello的间接父类并不是它的直接父类
2016-05-10 回复 有任何疑惑可以回复我~
#7

慕仰9290566 回复 _Jack_Han_ 提问者

‘Banana的类里是空的,所以Hello什么都没继承到"不怎么对
2016-05-10 回复 有任何疑惑可以回复我~
查看4条回复

eat方法的运行结果少写了“比如香蕉”,请忽略。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于多层继承的问题,有代码。(多层继承是我自己想出来的词,不知道恰不恰当~)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信