java中父类和子类的成员变量可以重名吗

在Java中,子类可以声明一个与父类同名的成员变量,这称为字段隐藏(Field Hiding); 如果子类中定义了一个与父类同名的成员变量,则会发生字段隐藏,而不是覆盖。这意味着子类中的同名成员变量会"遮蔽"掉父类中的那个变量,但这并不影响父类中原有成员变量的存在。但需要注意以下关键点:

核心规则:

  1. 允许声明同名变量:语法上完全允许子类定义与父类同名的成员变量。

  2. 独立存储 :父类和子类的同名变量是两个独立存储的变量,互不影响。

  3. 访问规则

    • 在子类方法中直接使用变量名时,默认访问的是子类自己的变量

    • 若需访问父类的同名变量,必须使用 super.变量名(如 super.c)。

  4. 多态不适用 :字段访问不遵循多态规则,由引用类型决定访问哪个变量。

示例代码:

java 复制代码
class Parent {
    int c = 10; // 父类成员变量
}

class Child extends Parent {
    int c = 20; // 子类隐藏父类的c

    void print() {
        System.out.println(c);         // 20 (子类变量)
        System.out.println(super.c);   // 10 (父类变量)
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj1 = new Child();
        System.out.println(obj1.c);    // 10 (引用类型为Parent,访问父类变量)

        Child obj2 = new Child();
        System.out.println(obj2.c);    // 20 (引用类型为Child,访问子类变量)
    }
}

总结:

场景 访问结果
子类方法中直接写 c 子类的变量
子类方法中写 super.c 父类的变量
通过父类引用 Parent obj 访问 父类的变量(编译时决定)
通过子类引用 Child obj 访问 子类的变量
相关推荐
菜鸟小芯3 分钟前
Qt Creator 集成开发环境下载安装
开发语言·qt
JZC_xiaozhong6 分钟前
多系统权限标准不统一?企业如何实现跨平台统一权限管控
java·大数据·微服务·数据集成与应用集成·iam系统·权限治理·统一权限管理
阿猿收手吧!16 分钟前
【C++】引用类型全解析:左值、右值与万能引用
开发语言·c++
「QT(C++)开发工程师」21 分钟前
C++ 策略模式
开发语言·c++·策略模式
iFeng的小屋32 分钟前
【2026最新当当网爬虫分享】用Python爬取千本日本相关图书,自动分析价格分布!
开发语言·爬虫·python
yugi98783833 分钟前
基于MATLAB的一键式EMD、EEMD、CEEMD和SSA信号去噪实现
开发语言·matlab·信号去噪
热爱编程的小刘1 小时前
Lesson05&6 --- C&C++内存管理&模板初阶
开发语言·c++
爬山算法1 小时前
Hibernate(85)如何在持续集成/持续部署(CI/CD)中使用Hibernate?
java·ci/cd·hibernate
菜鸟233号2 小时前
力扣647 回文子串 java实现
java·数据结构·leetcode·动态规划
qq_12498707532 小时前
基于Java Web的城市花园小区维修管理系统的设计与实现(源码+论文+部署+安装)
java·开发语言·前端·spring boot·spring·毕业设计·计算机毕业设计