子类对父类成员的可见性咨询——结合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
相关产品推荐
相关产品推荐

