上一次說到了Java中的繼承,當然了,有些父類中的成員變量和方法就不能被子類繼承,這是父類的成員變量和方法的通路權限的問題。
雖然子類繼承父類之後,可以将父類中的成員變量和方法當作像是自己定義的一樣,直接拿來進行操作,但由于存在通路權限的問題,是以并不是所有的變量和方法都可以随意拿來用。
當子類和父類在同一個包中時,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,且繼承的成員變量或方法的通路權限保持不變。說明白點就是,子類隻能繼承父類中的public、protected以及友好通路權限的成員變量或方法,并且繼承之後,這些成員變量或方法的通路權限和之前的一樣,如父類中是public,繼承後還是public。這個應該很好了解,private作為通路權限的最低級(通路權限從高到低的排列順序是:public、protected、友好的、private),定義的成員變量或方法隻能被自己使用,不能被其他類使用。
例如:
A.java
public class A {
intx = 5, y = 8;
String name;
public void doMath(){
System.out.print(name+ "會做數學題,");
}
protected void getResult(){
System.out.print("其計算的結果為:");
}
}
B.java
public class B extends A{
intadd(){
return(x+y);
}
}
Test.java
public class Test {
public static void main(String[] args){
B b =new B();
b.name= "小明"; //通路繼承的成員變量
b.doMath(); //調用繼承的public的方法
b.getResult(); //調用繼承的protected的方法
intresult = b.add();
System.out.println("x+ y =" + result);
}
}
但是,當子類和父類不在同一個包中,父類中的private和友好通路權限的成員變量不會被子類繼承,那也就是說,此時子類隻繼承父類中的public和protected通路權限的成員變量作為子類自己的成員變量;同樣的,子類也隻繼承父類中的public和protected通路權限的方法作為子類自己的方法。