关于java中的多态理解

                                   关于java中的多态理解

多态的定义:不同类型的对象对同一消息做出的不同反应;就是同一消息根据对象的不同而采取多种不同的行为方式;(发送消息指的是函数的调用)。
实现多态的技术:动态绑定,动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的作用:消除类型之间的耦合关系。
多态存在的必要条件:
1.继承
2.重写
3.父类引用指向子类对象

多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

当父类引用变量指向子类对象的时候,当引用变量调用子类重写父类的方法或者属性的时候,那么就使用子类的方法或者属性,如果调用方法或者属性子类没有重写,那么继续调用父类的方法或者属性;
”’
public class A {

public String show(D obj){
    return("A and d");
}

public String show(A obj){
    return("A and A");  
}

”’
public 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 (D obj){
     return("子类重写了父类的方法");
 }

}

public class C extends B {

public String show(C boj){
    return("C and C");
}


    public String show(B obj){
        return("C and B");


}

}
public class D extends C {

public String show(D obj){
    return("D and D");
}
public String show(C obj){

    return("D and C");
}

}
public class test1 {
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(a1.show(b));
    System.out.println(a1.show(c));
    System.out.println(a1.show(d));
    System.out.println("------------------------");
    System.out.println(a2.show(b));
    System.out.println(a2.show(c));
    System.out.println(a2.show(d));
    System.out.println("----------------------");
    System.out.println(b.show(b));
    System.out.println(b.show(c));
    System.out.println(b.show(d));

}

}
输出的结果:A and A
A and A

A and d

B and A
B and A

子类重写了父类的方法

B and B
B and B
子类重写了父类的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值