重载Overloading是一个类中多态性的一种表现;
重写Overriding是父类与子类之间多态性的一种表现。
重载和重写时,方法调用顺序的规则:
1 首先是看调用顺序:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)、this.show(super((super)O))、super.show(super((super)O))。。。。。。直到找到符合的方法。
例:
类A
类B extend A
A a1 = new A();//this为A
A a2 = new B();//this为A
2 最后看子类有没有覆盖这个方法,如果子类重写了这个方法,则调用的是子类的。
例子:
class A{ public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A{ public String show(B obj){ return ("B and B"); } public String show(A obj){ return ("B and A"); } } class C extends B{} class D extends B{} public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println("1- "+a1.show(b)); System.out.println("2- "+a1.show(c)); System.out.println("3- "+a1.show(d)); System.out.println("4- "+a2.show(b)); System.out.println("5- "+a2.show(c)); System.out.println("6- "+a2.show(d)); System.out.println("7- "+b.show(b)); System.out.println("8- "+b.show(c)); System.out.println("9- "+b.show(d)); System.out.println("10- "+a2.show(a1)); System.out.println("11- "+a1.show(c)); System.out.println("12- "+a1.show(d)); }
答案:
1- A and A
2- A and A
3- A and D
4- B and A
5- B and A
6- A and D
7- B and B
8- B and B
9- A and D
10- B and A
11- A and A
12- A and D