天天看點

JAVA子類和父類在同一個包中,Java中繼承時的問題——子類和父類在(或不在)同一個包中的繼承...

上一次說到了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通路權限的方法作為子類自己的方法。