1. 程式人生 > >Java語法細節 - 可見性

Java語法細節 - 可見性

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語法細節 - 可見性