请教一个向上转型的问题
public class AppTest
{
{
Shapes fatcher = new Circle();
fatcher.funA();
}
}
class Shapes
{
public void funA()
{
funB();
}
public void funB()
{
System.out.println( "这是Shapes类的 ");
}
}
class Circle extends Shapes
{
public void funB()
{
System.out.println( "这是Circle类的 ");
}
}
这里我调用
Shapes fatcher = new Circle();
fatcher.funA();
..这里子类Circle没有funA()方法,就调用的父类funA();那父类里面的funA方法.应该调用父类的funB(),为什么调用子类的funB()呢.
我现在对多态的理解还没有入门啊
------解决方案--------------------这样理解应该容易理解一点
子类继承了父类的方法
除了重载外的方法 其余的方法只是没有写出来 但是记住子类仍然拥有这些方法
由于Shapes fatcher=new Circle();
创建的是Circle类的实例而非其父类的 所以要调用Circle类的方法
------解决方案--------------------楼主说“子类Circle没有funA()方法,就调用的父类funA()”理解有误
子类Circle其实已经从父类那里继承了funA()
------解决方案--------------------不要被楼上的误导。
这正是多态性实现的基础。虽然你声明的是Shape类,但是你得到的实例是Circle类的,所以方法调用都是针对Circle类的。而方法funA,因为是public方法,所以Circle类继承了它,又因为没有重写(override)funA,所以调用funA的时候调用的是完全继承自Shape的方法funA,它调用了funB;因为实例本身是Circle,所以调用了Circle的funB。
整个过程没有任何麻烦可言。