问答详情
源自:9-1 Java 中的继承

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

//先看代码
//创建一个父类
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类的属性和方法,这是不是有两个父类呢?
望高手解答,谢谢!


提问者:_Jack_Han_ 2016-01-06 00:07

个回答

  • Its_forever
    2016-01-06 00:23:54
    已采纳

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


  • _Jack_Han_
    2016-01-06 00:09:40

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