java中多态的属性和方法

在 Java 中,‌多态 ‌主要体现在‌方法 ‌上,而‌属性(成员变量)不具有多态性‌。这是 Java 多态机制的核心规则之一。

多态中方法的行为

  • 方法调用遵循"编译看左边,运行看右边"原则‌:

    • 编译阶段‌:检查父类引用是否声明了该方法。
    • 运行阶段 ‌:实际调用的是‌子类重写后的方法‌(如果子类重写了该方法)。
  • 前提条件‌:

    1. 存在‌继承关系‌(子类继承父类或实现接口)。
    2. 子类‌重写‌(override)父类方法。
    3. 使用‌父类引用指向子类对象‌(向上转型)。
  • 示例‌:

    class Animal {
    void eat() {
    System.out.println("动物吃东西");
    }
    }

    class Dog extends Animal {
    @Override
    void eat() {
    System.out.println("狗吃骨头");
    }
    }

    public class Test {
    public static void main(String[] args) {
    Animal a = new Dog(); // 向上转型
    a.eat(); // 输出:狗吃骨头(运行时调用子类重写的方法)
    }
    }

多态中属性的行为

  • ‌**属性访问始终"编译看左边,运行也看左边"**‌:

    • 无论实际对象是哪个子类,‌访问的是父类引用类型中定义的属性‌。
    • 属性不会被重写‌,子类中同名属性只是"隐藏"了父类属性,而非覆盖。
  • 示例‌:

    class Parent {
    int value = 10;
    }

    class Child extends Parent {
    int value = 20; // 隐藏父类属性,不是重写
    }

    public class Test {
    public static void main(String[] args) {
    Parent p = new Child();
    System.out.println(p.value); // 输出:10(父类的 value)
    }
    }

其他不具有多态性的成员

以下成员‌不支持多态‌,编译期就确定调用哪个版本:

  • 静态方法 ‌(static):调用取决于引用类型。
  • 私有方法 ‌(private):不能被子类重写。
  • ‌**final 方法**‌:不能被重写。
  • 构造方法‌:不属于继承体系,不参与多态。

**示例:**静态方法无多态

复制代码
class A { static void show() { System.out.println("A"); } }
class B extends A { static void show() { System.out.println("B"); } }
A a = new B();
a.show(); // 输出 "A",不是 "B"

备注

  • 方法 ‌:多态 → ‌运行时动态绑定‌,调用子类重写的方法。
  • 属性 ‌:‌无多态‌ → 始终访问父类引用中的属性。
  • 注意:若需访问子类特有属性或方法,必须进行‌向下转型 ‌,并使用 instanceof 安全判断。
相关推荐
xcl092510 分钟前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析
Kyrie_kk19 分钟前
Java--IO--Path文件访问
java·后端
qinqinzqq23 分钟前
Maven POM 格式、Schema 与 XSD:一篇讲透
java·maven
o盟41 分钟前
maven本地仓库有 总是去私仓中下载
java·maven·intellij-idea
devpotato1 小时前
Java 批量并发请求:从“能并发“到“结果按完成顺序可用“的三种写法与选型
java
苏生Susheng2 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
想要成为老金高手2 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes
吴长建先生重名了2 小时前
ElasticSearch 检索系统性能优化实战:基准测试
java
西索斯coding2 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
旧梦95272 小时前
Java SortedMap 接口详解:从入门到实战
java·开发语言