Java多态基础
面向对象的三个基本特征:封装,继承,多态。继承和封装比较简单这里就省略了,主要学习一下多态的运用。
多态
多态是同一个行为具有多个不同表现形式或形态的能力。通俗来讲就是同一个接口的不同的实现。想要了解多态就要先了解两个基本点,重写和重载,其中重载也属于多态的一种表现形式,附带上链接:
链接: https://blog.csdn.net/qq_37550867/article/details/105845568.
调用方法的优先级
this.show(O)>super.show(O)>this.show((super)O)>super.show((super)O)
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");
}
public String show(C obj){
return ("B and C");
}
}
class C extends B{ }
class D extends B{ }
public class a12 {
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));
}
}
//输出结果
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 C
9--A and D
按照 this.show(O)>super.show(O)>this.show((super)O)>super.show((super)O) 这个的顺序来推,简单解释几个例子:
第一个 a1.show(b)
根据A a1 = new A() 可知 a1 指向了A类的实例。
当a1.show(b)时 ,首先执行第一步this.show(O) ,a1会去找A类中有没有一个 String show(B b)的方法,这里是没有的。
执行第二步super.show(O),a1再去找A的父类中有没有这个方法,但A没有父类。
执行第三步,this.show((super)O),a1去找B的父类,也就是A,再在A类中找是不是有String show(A a)这个方法,发现确实有,最后调用本方法,所以是A and A。
第六个 a2.show(d)
简单提两个点,这里a2指向的是B类的实例,利用: 上转型对象创建。因为为B类中没有String show(D d)的方法,所以去B类的父类也就是A类中找,发现存在此函数。所以输出是A and D。
代码转载于:
https://www.jianshu.com/p/f2f9d8b190b2