You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类对父类成员的可见性咨询——结合Java多边形类代码实例

子类访问父类成员的权限说明

嘿,我来帮你理清Java中子类访问父类成员的权限问题,结合你提供的Polygon父类代码来解释会更直观~

子类能访问父类的哪些成员?

这里给你分情况列出来,清晰明了:

  • public成员:所有被public修饰的方法和变量,子类都能直接访问。就像你代码里的side(int number)方法,子类可以直接调用它来获取父类私有数组里的值,这就是你现在正在做的操作。
  • protected成员:如果父类的成员用protected修饰,不管子类和父类是否在同一个包下,子类都能直接访问这些成员。
  • 同包下的默认(default)成员:如果子类和父类处于同一个包中,父类没有加任何访问修饰符的成员(也就是默认权限),子类也可以访问。
  • private成员:划重点!子类不能直接访问父类的private变量或方法——比如你代码里的sideLengths数组,子类没法直接写super.sideLengths来操作它。不过,子类可以通过父类提供的public或protected方法间接访问这些私有成员,就像你用side()方法拿到数组里的元素,这是完全合法的做法。

对你疑问的补充解答

你问“是否可以访问所有public方法与变量,而无法访问任何private变量?”——前半句是对的,所有public的方法和变量子类都能直接访问;但后半句要修正:不是完全“无法访问”,而是不能直接访问,必须通过父类暴露的公共接口(比如你的side()方法)来间接获取私有成员的值。

附上你提供的父类代码(补充了side()方法的返回逻辑):

class Polygon { 
    private int[] sideLengths; 
    public Polygon(int sides, int ... lengths) { 
        int index = 0; 
        sideLengths = new int[sides]; 
        for (int length: lengths) { 
            sideLengths[index] = length; 
            index += 1; 
        } 
    } 
    public int side(int number) { 
        return sideLengths[number]; // 假设此处返回对应下标的边长值
    }
}

内容的提问来源于stack exchange,提问作者Kyle Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:26:58