1 class Father { 2 public void func1() { 3 func2(); 4 } 5 6 //这是父类中的func2()方法,因为下面的子类中重写了该方法 7 //所以在父类类型的引用中调用时,这个方法将不再有效 8 //取而代之的是将调用子类中重写的func2()方法 9 public void func2() { 10 System.out.println("AAA"); 11 } 12 } 13 14 class Child extends Father { 15 //func1(int i)是对func1()方法的一个重载,主要不是重写! 16 //由于在父类中没有定义这个方法,所以它不能被父类类型的引用调用 17 //所以在下面的main方法中child.func1(68)是不对的 18 public void func1(int i) { 19 System.out.println("BBB"); 20 } 21 22 //func2()重写了父类Father中的func2()方法 23 //如果父类类型的引用中调用了func2()方法,那么必然是子类中重写的这个方法 24 public void func2() { 25 System.out.println("CCC"); 26 } 27 } 28 29 public class PolymorphismTest { 30 public static void main(String[] args) { 31 Father child = new Child(); 32 child.func1();// 打印结果将会是什么? 33 child.func1(68); 34 } 35 }
上面的程序是个很典型的多态的例子。
子类Child继承了父类Father,并重载了父类的func1()方法,重写了父类的func2()方法。
重载后的func1(int i)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(int i)方法。而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()。
重载是简单来说:可能参数列表等不一样不是一个方法 重写是子对父一样的函数名等进行重新编写