class Animal
{
public int height =1;
public void output()
{
System.out.println(height);
}
}class Fish extends Animal
{
public int height=2;
public void output()
{
System.out.println(height);
}}
public class Inheritage { public static void main(String[] args) {
Animal an=new Fish();
System.out.println(an.height);//1
an.output();//2
}}为什么两个输出分别是1和2? 这个继承的过程大概是怎样的?谢啦!
{
public int height =1;
public void output()
{
System.out.println(height);
}
}class Fish extends Animal
{
public int height=2;
public void output()
{
System.out.println(height);
}}
public class Inheritage { public static void main(String[] args) {
Animal an=new Fish();
System.out.println(an.height);//1
an.output();//2
}}为什么两个输出分别是1和2? 这个继承的过程大概是怎样的?谢啦!
这个就是多态了,也叫动态绑定,
按照刚才说的应该是调用他父类的output方法,但是这里很特殊,
Fish它重写了output方法,那么当调用的时候会动态的绑定,an是什么对象就调用它的方法
构成多态必须要有3个条件
1.要有继承的关系
2,父类引用指向子类对象
3.必须要有方法的重写
我的文字水平有限说的不好,具体你去网上看多的是
在用Fish f = new Fish(),f.sHeight就可以了,
}
}
是Animal an 是一个Animal的引用指向子类的对象。an.height.属性还是父类的 调用的是Animal的height
如果你这样new
Fish fish = new Fish();
System.out.println(fish.height);
这输出的就是子类的属性!2