1.關于在靜態方法中訪問非靜態內部類的問題
public class Outer{
public String name = "Outer";
public static void main(String argv[]){
//Inner myinner = new Inner(); //直接用這句話創建會編譯錯誤
Outer myouter=new Outer(); //先創建外部類的對象
Outer.Inner myinner=myouter.new Inner();
myinner.showName();
}//End of main
//下面這段代碼用來測試這種n煩的辦法
public void amethod(){
Outer myouter=new Outer();
Outer.Inner myinner=myouter.new Inner();
myinner.showName();
}
//非靜態方法訪問非靜態內部類
private class Inner{
String name =new String("Inner");
void showName(){
System.out.println(name);
}
}//End of Inner class
}
在非靜態方法訪問非靜態內部類直接創建該內部類的對象:new Inner().showName();當然也可以采取這種n煩的辦法假設private class Inner改成static private class Inner, 那么在靜態方法中訪問靜態內部類也是直接創建該內部類的對象,即Inner myinner = new Inner(),或者Outer.Inner myinner = new Outer.Inner()也行得通,可見這種n煩的方法在上面三種情況下都是可以用的。
2.Abstract方法不能用final,static修飾非abstract方法在abstract類中可以用final,static
抽象類中的抽象方法不能是final,但是非抽象方法前加final可以編譯通過因為abstract和final相互排斥,前者專用于繼承,后者禁止繼承
抽象類中的抽象方法不能為static
非抽象方法可以為static
包裹類Integer、 String 、Float、 Double等都是final類,不能被繼承!Integer i=new Integer(“6”);如果字符串不是數字,會產生運行異常(不會出現編譯錯誤)但是對于boolean,這個規則不適用。當字符串時(大小寫無關),Boolean對象代表的數值為true,其他字符串均為false如:
Boolean b = new Boolean(“afiwou”); 代表false
Boolean b = new Boolean(“tRue”); 是true
3.多態性、虛擬方法調用
public class Test8 {
public static void main(String [] args){
Base b = new Subclass();
System.out.println(b.x);
System.out.println(b.method());
}
}
class Base{
int x = 2;
int method(){
return x;
}
}
class Subclass extends Base{
int x = 3;
int method(){
return x;
}
}
結果是2,3,而不是3,3
Employee e = new Manager();
e.department = " Finance " ;
//department 是Manager的一個特殊屬性
聲明變量e后,你能訪問的對象部分只是Employee的部分;Manager的特殊部分是隱藏的。這是因為編譯器應意識到,e 是一個Employee,而不是一個Manager。但重寫的方法除外
在你接收父類的一個引用時,你可以通過使用instanceof運算符判定該對象實際上是你所要的子類,并可以用類型轉換該引用的辦法來恢復對象的全部功能。為什么說“恢復對象的全部功能”,就是因為上一格所描述的,子類對象賦給父類句柄后,該句柄不能訪問子類的那些特殊屬性和方法,要用就要重新造型。這其實是多態參數的后續應用,形成這樣一個鏈條:傳入多態參數??instanceof判斷類型??casting??恢復功能
Employee e = new Manager();
e.getDetails();
在此例中,Manager 重寫了Employee的getDetail()方法。被執行的e.getDetails()方法來自對象的真實類型:Manager。事實上,執行了與變量的運行時類型(即,變量所引用的對象的類型)相關的行為,而不是與變量的編譯時類型相關的行為。這是面向對象語言的一個重要特征。它也是多態性的一個特征,并通常被稱作虛擬方法調用??“動態綁定”
寫了這么多也不知道對你有沒有幫助呢?