Java語法細節 - 可見性
阿新 • • 發佈:2019-04-15
generate ren ble modifier table 操作 語法 fun stat
JAVA訪問和修飾符的關系一覽表
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
讓我們來看下面的示例代碼:
package1中的代碼:
MainClass.java
package org.seancheer.package1; import org.seancheer.package2.SecondChild; public class MainClass { public static void main(String[] args) { /* * 對於沒有標識符的方法,默認的是包訪問,所以對於SecondChild方法, * 雖然也有同名的func()方法,但是實際上並沒有進行覆寫操作,調用的 * 還是父類的方法。 */ ParentClass parentOne = new FirstChild(); parentOne.func(); //func() in first child ! ParentClass parentTwo = new SecondChild(); parentTwo.func(); //func() in the parent class ! /* * 註意!!!!和c++不一樣的地方,protected修飾符的方法也可被實例訪問到, * 但是必須有個前提:該實例new出來的位置必須和類在同一個package內,在其 * 他package是無法訪問到的! */ ParentClass parent = new ParentClass(); parent.protectedMethod(); } }
FirstChild.java
package org.seancheer.package1;
public class FirstChild extends ParentClass{
@Override
void func() {
// TODO Auto-generated method stub
System.out.println("func() in first child !");
}
}
ParentClass.java
package org.seancheer.package1; public class ParentClass { void func() { System.out.println("func() in the parent class !"); } protected void protectedMethod() { System.out.println("protectedMethod() in the parent class !"); } }
package2中的代碼:
SecondChild.java
package org.seancheer.package2; import org.seancheer.package1.ParentClass; public class SecondChild extends ParentClass{ void func() { System.out.println("func() in the second child !"); } public static void main(String[] args) { ParentClass parent = new ParentClass(); //註意,是無法訪問到protected方法的,但是如果在同一個包內就是可以訪問的! //parent.protectedMethod(); } }
Java語法細節 - 可見性