?? 305c529f1975001d1dddb6604daa6ad2
字號:
/*【例4-10】 不同包中的子類只能繼承父類中的public和protected成員,
* 且不同包中的非子類不能調用protected成員,只有子類才能調用protected成員。
*/
//程序清單4-10: InheritanceRuleOfDifferentPackage.java
package e4_10.p1;
import e4_10.p2.*; //引入e4_10.p2包中的所有類
public class InheritanceRuleOfDifferentPackage {
public static void main(String args[]) {
B objB = new B();// 實例化類B
B obj = new B(objB);// 實例化類B
// *** objB.setA1(8);// 非子類不能調用不同包中的protected方法
// *** objB.setA2(9);// 非子類不能調用不同包中的protected方法
objB.setB1(7);// 調用子類B中public方法
// //類A中的private變量a1不能被子類B繼承
// System.out.println(objB.a1);
System.out.println(objB.getA1());// 調用父類A中public方法
// System.out.println(objB.a2);// 不能調用父類A中的默認變量
System.out.println(objB.getA2());// 調用父類A中public方法
// 不能直接訪問類B中的被private封裝的變量
// System.out.println(objB.b1);
System.out.println(objB.getB1());// 調用子類B中protected方法
}
}
class B extends A {// 同一包中的類B繼承類A
// 被繼承的有:protected類型的a2、setA1()、setA2()
// 和public類型的getA1()、getA2()
// 不能被繼承的是:private類型的a1
private int b1 = 3;
public B() { }//無參構造方法
public B(B objB) {//帶一個參數的構造方法
// 不同包中的子類可調用父類中protected方法
objB.setA1(5);
// 不同包中的子類可調用父類中protected方法
objB.setA2(6);
}
protected int getB1() {
return b1;
}
public void setB1(int b1) {
this.b1 = b1;
}
}
//A.java
package e4_10.p2;
public class A {// 類A
private int a1 = 1;// 私有變量
int a2 = 2;// 默認變量
public int getA1() {// 公有方法
return a1;
}
protected void setA1(int a1) {// 保護方法
this.a1 = a1;
}
public int getA2() {// 公有方法
return a2;
}
protected void setA2(int a2) {// 保護方法
this.a2 = a2;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -