class Father{ public void func1(){ func2(); } //这是父类中的func2()方法,因为下面的子类中重写了该方法 //所以在父类类型的引用中调用时,这个方法将不再有效 //取而代之的是将调用子类中重写的func2()方法 public void func2(){ System.out.println("AAA"); } }
class Child extends Father{ //func1(int i)是对func1()方法的一个重载 //由于在父类中没有定义这个方法,所以它不能被父类类型的引用调用 //所以在下面的main方法中child.func1(68)是不对的 public void func1(int i){ System.out.println("BBB"); } //func2()重写了父类Father中的func2()方法 //如果父类类型的引用中调用了func2()方法,那么必然是子类中重写的这个方法 public void func2(){ System.out.println("CCC"); } }
public class PolymorphismTest { public static void main(String[] args) { Father child = new Child(); child.func1();//打印结果将会是什么? } } 上面的程序是个很典型的多态的例子。子类Child继承了父类Father,并重载了父类的func1()方法,重写了父类的func2()方法。重载后的func1(int i)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(int i)方法。而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()。