记录java的多态性的理解

Java的多态性理解

格式: 父类 obj=new 子类();

直接通过对象名访问成员变量:看*左边*是谁就是谁的,没有则向上找

间接通过成员方法访问成员变量:看*该方法属于谁*,优先用谁,没有则向上找

直接访问成员方法,看new的是谁,就优先用谁,没有则向上找
编译看左,运行看右

定义父类和子类

public class Polymorphism {
 public static void main(String[] args) {
  A a1 = new A();
  A a2 = new B();              //创建B对象,转化成A对象,拥有的成员函数是showD(),和覆盖掉show(A){A and A }的show(A){B and A}成员函数
  B b = new B();               //B继承A,拥有showD()和show(A){B and A}成员函数
  C c = new C();
  D d = new D();
  System.out.println(a1.show(b));       //使用a1的成员函数show(A)
  System.out.println(a1.show(c));       //使用a1的成员函数show(A)
  System.out.println(a1.show(d));      //使用a1的成员函数show(D)
  System.out.println(a2.show(b));     //使用覆盖后的show(A)
  System.out.println(a2.show(c));       //使用覆盖后的show(A)
  System.out.println(a2.show(d));     //使用继承的show(D)
  System.out.println(b.show(b));       //使用B的show(B)
  System.out.println(b.show(c));
  System.out.println(b.show(d));
 }
}

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{
}
}
————————————————
版权声明:本文为CSDN博主「aoyingge」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aoyingge/article/details/8602496
**在主函数中**

//创建父类对象
A a1 = new A();//用A类来创建一个空间,将地址赋给A的对象a1,本质还是A
A a2 = new B();//用A类来创建一个空间,将地址赋给A的对象a2,本质还是B
/* 此时的a2具有的方法:被B覆写的Fu方法和A本身带有的方法,由调用成员方法,由编译看左边,运行看右边,可知不包括B独有的而A没有的方法
*/
B b = new B();//用B来创建一个空间,将地址赋给A的对象b,这样b就既有
自己的本身带有的方法又有A继承过来的方法;

总的来说就是向下转型时,父类的对象所带有的方法只能是它本身自带的方法和
子类覆写的方法

输出结果是:

A and A
A and A
A and D
B and A
B and A
A and D
B and B
B and B
A and D
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值