java中protected的再認識

package packageA;

public class ClassA {
	protected String s;
}

如今有另一個包裏的類繼承java

package packageB;

import packageA.ClassA;

public class ClassB extends ClassA {
	public void run(){
		System.out.println("run");
		ClassA a=new ClassA();
		System.out.println(a.s);
	}
}

結果會發現a.s會出錯,緣由是無訪問權限IDE建議改成publiccode

但是ClassB明明訪問了ClassA啊(以前在ClassB中main方法訪問出問題還覺得是static方法不能訪問...)繼承

可當把ClassB移動帶ClassA相同的目錄下時就能夠操做a.s了class

protected其實也是同包能夠訪問(這點和default一致),另外還有個功能就是能夠被之類繼承,其實就是至關於之類也有一個protected String s;這一段代碼,只是因爲繼承而省略了,這樣能夠減小代碼量,那麼其實之類是在訪問本身的變量import

對於方法也是一樣的道理,能夠參見下面的代碼:變量

package packageA;

public class ClassA {
	protected String s;
	public void print(){
		System.out.println(s);
	}
}

package packageB;

import packageA.ClassA;

public class ClassB extends ClassA {
	public static void main(String[] args){
		ClassB b=new ClassB();
		b.print();
		b.s="classB";
		b.print();
	}
}

結果爲null和classB,其實至關於把class的相關代碼拷貝到classB中權限

相關文章
相關標籤/搜索