很多人在初次接触设计模式的时候,最大的疑惑莫过于碰到这样的句子:(父类C和子类C1)
// 父类引用指向子类对象:父类名 对象名=new 子类名();
C c = new C1();
// 相当于
C c = new C ();
C1 c1 = new C1();
c = c1;
这种用法叫做“父类引用指向子类对象”,或者叫“父类指针指向子类对象”,指的是定义一个父类的引用,而它实际指向的是子类创建的对象。功能上相当于子类的“向上转型”。
向上转型时,父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的.
class C {
public int funcA( int a, int b){
return a+b;
}
public int funcB( int a, int b){
return a+b;
}
}
class C1 extends C{
@Override
public int funcA( int a, int b) {
return a-b;
}
public int funcC( int a, int b) {
return a-b;
}
}
class Client{
public static void main(String[] args) {
C c = new C1();
System.out.println( "2+1=" + c.funcA( 2 , 1 )); //2+1=1 调用子类重写的funcA
System.out.println( "2+1=" + c.funcB( 2 , 1 )); //2+1=3 子类未重写funcB(),调用父类的funcB();
// System.out.println( "2+1=" + c.funcC( 2 , 1 ));//报错 子类的单独方法无法调用
}
}