package com.hiyo.HighClass;
//对象向上转型的例子
class PolyA {
public void method1() {
System.out.println("PolyA---->method1") ;
}
public void method2() {
this.method1();
}
}
class PolyB extends PolyA {
public void method1() {
System.out.println("PolyB---->method1");
}
public void method3() {
System.out.println("PolyB---->method3");
}
}
class PolyC extends PolyA {
public void method1() {
System.out.println("PolyC---->method1");
}
}
public class PolymDemo1 {
public static void main(String[] args) {
PolyB pb = new PolyB() ;
PolyA pa = pb ;//发生向上转型
pa.method1(); //调用子类覆写过的方法
//PolyB---->method1
//父类对象调用方法,实际上调用的是子类覆写过的方法
//发生向上转型,所调用的方法肯定是被子类覆写过的方法
pa.method2() ;
//父类对象调用自己的方法
//method2()中的this.method1(),this还是指子类对象
//pa.method3() ;
//method3只在子类中进行了定义,没有在父类中定义
//无法用父类对象调用只在子类中定义的方法。
//只在子类中定义的方法,必须用子类对象调用
//或者父类对象采用向下转型。
((PolyB)pa).method3() ;//向下转型
//如果要调用子类自己的方法,只能用子类生命对象
//对象的多态实例
PolyB pb3 = new PolyB() ;
PolyC pc3 = new PolyC() ;
mainMethod(pb3);
mainMethod(pc3);
}
public static void mainMethod(PolyA pa) {
pa.method1();
}
}