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 安全判断。
相关推荐
AntsData9 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat9 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰9 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
Flynn Liang10 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞10 小时前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
计算机毕设定制辅导-无忧学长10 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
雪芽蓝域zzs11 小时前
第 1 章:IDEA 创建 SpringBoot3.5.16 Maven 项目
java·maven·intellij-idea
golang学习记11 小时前
IDEA 开始换芯,发布全新AI版终端
java·人工智能·intellij-idea
vipxieliang11 小时前
ValidX 正则表达式预编译优化:Pattern 复用策略
java·spring boot·后端
Wang's Blog11 小时前
Java 项目实战:交友项目 - FastDFS 工作原理
java·大数据·交友