JAVA多态性

#java多态


重写override:继承关系
重载overload:同一个类


多态存在的三个必要条件:

一、继承;
二、重写;
三、父类引用指向子类对象。


好处:

可替换性(substitutability)多态对已存在代码具有可替换性
可扩充性(extensibility)多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能
接口性(interface-ability)多 态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的
灵活性(flexibility)体现了灵活多样的操作,提高了使用效率。
简化性(simplicity)多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

举个常见的栗子:

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{}
class E{
    public static void main(String [] args)
    {
        A a1 = new A();//只用A类的
        A a2 = new B();//a2中除了A的方法外,保留B类中重写override A类的方法(A类中被重写的方法被覆盖)
        B b = new B();
        C c = new C();
        D d = new D();

        System.out.println(a1.show(b));   //A and A   1
        System.out.println(a1.show(c));   //A and A   2
        System.out.println(a1.show(d));   //A and D   3
        // ---------------------------------------------------------------------------------
        System.out.println(a2.show(b));   //B and A   4
        //  a2.show(b),a2本来是一个B对象,但是将其赋给了A类变量,所以a2只保留了与父类A同名的属性和方法。
        //  a2.show(b)调用B类中的保留的与父类同名同参方法
        System.out.println(a2.show(c));   //B and A   5
        //C类是B类的子类,而B类又是A类的子类,所以C类对象可以当制作A类对象使用。结果与4一致。
        System.out.println(a2.show(d));   //A and D   6
        // ---------------------------------------------------------------------------------
        //A类有此方法
        System.out.println(b.show(b));    //B and B   7
        System.out.println(b.show(c));    //B and B   8
        System.out.println(b.show(d));    //A and D   9
        // ---------------------------------------------------------------------------------
        // B b2= (B) new A();// 出现错误,必须是父类2对象是子类new出来的时候才行,如下:
        B b2= (B) a2;
        System.out.println(b2.show(b));    //B and B   10
        System.out.println(b2.show(c));    //B and B   11
        System.out.println(b2.show(d));    //A and D   12
    }

}


两个问题:

  1. 是子类与父类的重写关系。
  2. 是重载方法的调用问题。
    子类对象可以直接当成父类对象使用、但反过来就不可以。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值