聲明:我不去上來給大家那一張被扯來扯去的√,×表,什么表想必大家心里清楚
下面進入正題:
protected 的主要着眼點在於兩點:
1.子類繼承 2.是否同包
心里記着上面的那兩點,那么protected 需要從以下兩個方面或者說結論來分析說明:
1.子類與基類在同一包中:被聲明為 protected 的變量、方法和構造器能被同一個包中的任何其他類訪問; 2.子類與基類不在同一包中:那么在子類中,子類實例可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類實例的protected方法。
子類與基類在同一包中想必大家很好理解,下面闡述子類與基類不在同一包中這種情形:
//代碼1:包A中有一個動物類 package testa; public class Animal { protected void crowl(String c){ System.out.println(c); } } //代碼2:包B中有兩個類——貓類和鼠類 package testb; import testa.Animal; class Cat extends Animal{ } class Rat extends Animal{ public void crowl(){ crowl("zhi zhi"); //沒有問題,繼承了Animal中的protected方法: crowl(String) Cat cat=new Cat(); cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible } }
總結:A父與B子不在同一包下,當B extends A的時候,在子類B的作用范圍內,只能調用本子類B定義的對象的protected方法(該方法從父類A中繼承而來),而不能訪問基類實例的protected方法。
其他注意事項:
1.protected 可以修飾數據成員,構造方法,方法成員
2.不能修飾類(內部類除外)。
3.接口及接口的成員變量和成員方法不能聲明為 protected