Java面向对象的特征【多态】

导读:本篇文章讲解 Java面向对象的特征【多态】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

面向对象特征: 多态

多态的介绍

什么是多态

同类型的对象,执行同一个行为,会表现出不同的行为特征。

多态的常见形式

父类类型 对象名称 = new 子类构造器;

接口 对象名称 = new 实现类构造器;

演示代码

  • 定义一个父类有两个子类继承
public abstract class Anima {
    public abstract void run();
}

class Dog extends Anima {
    @Override
    public void run() {
        System.out.println("狗跑的很快");
    }
}

class Pig extends Anima {
    @Override
    public void run() {
        System.out.println("猪跑的很慢");
    }
}
  • 多态的形式
class Test {
    public static void main(String[] args) {
        //父类类型, 子类构造器
        Anima dog = new Dog();
        dog.run(); // 狗跑的很快
        Anima pig = new Pig();
        pig.run(); // 猪跑的很慢
    }
}

多态中成员访问特点

方法调用:编译看左边,运行看右边。

变量调用:编译看左边,运行也看左边。(多态侧重行为多态)

多态的前提

有继承/实现关系;有父类引用指向子类对象;有方法重写。

定义多态的好处

在多态形式下,右边对象可以实现解耦合,便于扩展和维护。

定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。

多态类型转换

多态下会产生的一个问题

多态下不能使用子类的独有功能

多态下引用数据类型的数据转换

自动类型转换(从子到父):子类对象可以直接进赋值给父类类型的变量指向。

强制类型转换(从父到子):

此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量

作用:可以解决多态下的劣势,可以实现调用子类独有的功能。

注意: 如果转型后的类型和对象真实类型不是同一种类型,那么在转换的时候就会出现ClassCastException

class Test {
    public static void main(String[] args) {
        Anima dog1 = new Dog();

        // 自动类型转换
        dog1.run();
        // dog1.lookDoor(); 多态下不能使用子类独有的功能

        // 强制类型转换
        Dog dog2 = (Dog) dog1;
        dog2.lookDoor();
    }
}

Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换

变量名 instanceof 真实类型

判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其子类类型,是则返回true,反之。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120065.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!