是。若 A 是 B 父類,B 是 C 父類,則 A 也是 C 的父類(間接父類/祖先類)。
| 修飾符 | 同類 | 同包子類 | 異包子類 | 任意類 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default (package-private) | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
class A { // 祖父類
public int a = 1;
protected int b = 2;
int c = 3; // package-private
private int d = 4;
}
class B extends A { // 父類
void test() {
System.out.println(a); // ✅ public
System.out.println(b); // ✅ protected
System.out.println(c); // ✅ 同包
// System.out.println(d); // ❌ private 不可見
}
}
class C extends B { // 子類
void test() {
System.out.println(a); // ✅ 繼承鏈向上可見
System.out.println(b); // ✅
// System.out.println(c); // ❌ 若 C 在不同包,不可見
}
}
super()。private,提供 getter/setter 封裝。protected,或提供 protected 方法。protected 或 public,並加 @Override 註解確保正確重寫。