博客
关于我
7.0、Java继承与多态 - 多态的特性
阅读量:799 次
发布时间:2023-04-16

本文共 1795 字,大约阅读时间需要 5 分钟。

Java继承与多态 - 多态的特性

面向对象编程的三大核心特征中,多态性是非常重要的一环。多态性使得一个对象能够表现出多种不同的形态,这在实际开发中具有非常大的灵活性和扩展性。

多态的概念

多态性是指一个对象可以同时具有多种不同的形态。以现实生活中的例子来看,比如学生小明,他同时是一个学生(学生形态)和一个人类(人类形态)。同样地,在编程中,一个对象可以表现出多种不同的行为和属性,这正是多态性的体现。

在Java中,多态性的实现依赖于两个关键概念:

  • 继承(extends):用于定义类之间的关系,允许多个类继承自一个基类。
  • 实现(implements):用于定义一个类对某个接口或超类的支持,实现了对多态性的基本需求。
  • 父类引用指向子类对象

    在Java中,多态的本质表现为一个父类引用指向子类对象。以下是一个典型的例子:

    public class People {
    int num = 6;
    public void eat() {
    System.out.println("人类吃饭");
    }
    }
    public class Students extends People {
    int num = 9;
    @Override
    public void eat() {
    System.out.println("学生吃饭");
    }
    }
    public class Main {
    public static void main(String[] args) {
    People people = new Students();
    people.eat(); // 调用的是 Students 类中的 eat 方法
    System.out.println(people.num); // 调用的是 People 类中的 num 字段(6)
    }
    }

    在上述代码中:

    • people 是一个 People 类的引用,但实际指向了一个 Students 类的对象。
    • 当调用 people.eat() 时,由于 peoplePeople 类型的引用,编译器会调用 People 类的 eat 方法。但由于多态性的动态绑定(即运行时绑定),实际执行的是 Students 类的 eat 方法。
    • 当访问 people.num 时,同样是 People 类的 num 字段被调用,因为引用是 People 类型的,编译器和运行时都会访问 People 类的字段。

    访问成员方法和成员变量的规则

    在Java中,成员方法和成员变量的访问有所不同:

    成员方法的访问

    • 编译阶段:编译器根据引用端的类类型(父类)来选择方法的解析。
    • 运行阶段:在运行时,实际调用的是引用的对象(子类)中对应方法的实现。

    例如:

    Fu fu = new Zi();
    fu.eat(); // 编译阶段选择 Fu 类中的 eat 方法,但运行时调用 Zi 类中的 eat 方法
    fu.fuMethod(); // 编译阶段选择 Fu 类中的 fuMethod 方法,但运行时调用 Fu 类中的 fuMethod 方法
    fu.ziMethod(); // 编译阶段无法找到对应的方法,编译错误

    成员变量的访问

    • 编译阶段运行阶段:都根据引用的类类型(父类)来访问成员变量。

    例如:

    People people = new Students();
    people.num; // 编译和运行时都访问 People 类中的 num 字段(6)

    多态的作用

    多态性在Java中具有以下几个重要作用:

  • 行为的灵活性:一个对象可以表现出多种不同的行为,具体行为取决于其所属的子类。
  • 代码的扩展性:通过新增子类,可以在不修改现有代码的情况下,增加新的行为和功能。
  • 运行时的动态性:多态性使得程序在运行时能够根据实际情况进行方法和变量的动态绑定。
  • 总结

    多态性是Java面向对象编程中非常重要的一特性。通过多态性,一个对象可以同时具有多种不同的形态,并能够在运行时动态地表现出不同的行为。理解多态性是掌握Java对象编程的关键步骤。在实际编程中,多态性不仅能够提高代码的灵活性和扩展性,还能够使程序更加高效和易于维护。

    转载地址:http://oygfk.baihongyu.com/

    你可能感兴趣的文章
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>
    Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
    查看>>
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>