java多态详解

什么是多态?

​ 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用变量调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
java引用变量有两种类型:一种是编译时类型,一种是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定,如果编译时类型和运行时类型不一致,就可能导致所谓的多态。

多态的优点?

  • 消除类型之间的耦合关系
  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

多态存在的条件

  • 继承
  • 重写
  • 父类引用指向子类对象

例子

测试代码:

package ExtendLearn;

public class Test extends Basic{
    public int book=7;
    public void test()
    {
        System.out.println("子类覆盖父类的方法");
    }
    public void sub()
    {
        System.out.println("子类的普通方法");
    }

    public static void main(String[] args) {
        Basic d=new Test();
        d.base();
        d.test();
        d.sub();
        System.out.println(d.book);
    }
}
class Basic{
    public int book=6;
    public void base()
    {
        System.out.println("父类的普通方法");
    }
    public void test()
    {
        System.out.println("父类的被覆盖的方法");
    }
}

在调用d.sub()会爆红,因为basic类中没有sub方法;
注释掉该调用后得到下面结果
在这里插入图片描述
说明了子类中已经完成了对父类方法的重写,所以我们调用时会输出子类覆盖父类的方法,但是输出book是6,说明实例对象并没有被覆盖。
这个地方还没有彻底搞明白底层是怎么搞得,但是多态可以从这个程序中看出来,编译的时候由声明该变量时的类型决定,而实际运行时,由赋给该变量的对象决定,这就是一种方法的多态。

多态的实现方法

  • 重写
  • 接口
  • 抽象类和抽象方法

instanceof

instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class /* 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。   注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lndksk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值