接著昨天的多型知識點總結:
1.instanceof 物件型別的校驗,將返回乙個boolean值
instanceof 對型別進行判斷
animal animal = new cat();
animal instanceof cat//判斷建立的animal是否為cat
animal instanceof dog
物件 instanceof 型別 【將返回乙個booean型別】
判斷前面的物件,可不可以作為後面型別的例項
物件當中的成員方法—》堆當中的成員方法,儲存的是乙個【位址值】,指向了方法區的成員方法
例:
givepet(new dog());
public static void givepet(animal animal)
if(animal instanceof cat)
}
例:usedevice(usb usb);
實現類可以向上轉型成為介面型別---》從小到大,自動安全的進行轉換
usb usbmouse = new mouse();//向上轉型
loptop.usedevice(usbmouse);
keyboard keyboard = new keyboard();
loptop.usedevice(keyboard);//從範圍小到範圍大的,自動安全的進行向上轉型
loptop.usedevice(new keyboard());
2、final關鍵字:代表最終的,不可改變的
修飾乙個類
格式:
public final class 類名稱
【a】當前這個類(使用final修飾)不能有任何的子類。即不能被繼承,但是該類可以向上繼承父類
【b】不能使用乙個final類來作為父類
【c】使用final修飾後,其中的成員方法不能被覆蓋重寫,因為沒有子類;
public final class myclass extends object
}
修飾乙個方法
格式:修飾符 final 返回值型別 方法名稱(引數列表)
public final void methoda()
【注意】當final關鍵字來修飾乙個方法的時候,這個方法就是最終方法,不可以進行覆蓋重寫;
public class fu
public final void methoda()
}public class zi extends fu
@override//final修飾的方法,子類不能進行覆蓋重寫,編譯會報錯
public void methoda()
}
對於類和方法,abstract和final不能同時使用,因為是相互矛盾的;abstract抽象方法必須進行覆蓋重寫,但是final是不可以進行覆蓋重寫的,兩者在一起使用會衝突;
public abstract void method();//正確寫法 子類必須覆蓋重寫
public final void method(){}//正確寫法 因為是最後的方法,不能進行覆蓋重寫
public abstract final void method(){}//錯誤寫法 abstract是必須進行覆蓋,final不能進行覆蓋
修飾乙個區域性變數
使用final進行修飾的區域性變數,一旦賦值就不能在改變;只能一次賦值,永不改變;
final int num = 20;
int num = 20;就算再次賦同樣的值,也是進行了二次賦值,編譯會報錯
【注意】
【a】final int num3;
num3 = 30;//正確寫法
//num3先定義在進行賦值,是正確的,如果不賦值,將自動賦值預設值,之後就不可再進行改變,所以使用final修飾的變數必須進行手動的賦值操作;
【b】對於基本資料型別來說,不可變的是變數當中的數值不可變;
對於引用資料型別來說,不可變的是變數當中的位址值不可變;
final student stu = new student("a");
stu = new student("b");//錯誤寫法,final的引用型別變數,其中的位址不可改變
stu.setname("aa");//正確寫法 可以賦值
修飾乙個成員變數
對成員變數來說,如果使用final關鍵字進行修飾,那麼這個變數也是不可改變的;
【a】由於成員變數具有預設值,一旦用了final之後,必須手動賦值
不會再給預設值了
private final string name;//因為沒有進行賦值,預設值為null
【b】對於final的成員變數,要麼【使用直接賦值,要麼間接通過構造方法賦值】二者選其一;
private final string name = 「鹿晗」;//對其進行直接賦值
= name;setter()方法當中的賦值語句就會報錯,因為final修飾的成員變數一旦賦值,就不能改變;
//使用構造方法進行賦值,必須保證所有的構造方法都要進行賦值
//如果是單一賦值,程式會報錯
public person()
public person(string name)
//使用了構造方法對final修飾的成員變進行賦值,必須保證所有的構造方法都要對該成員變數進行賦值操作,否則編譯報錯
【c】必須保證所有的過載的構造方法,都對final修飾的成員變數進行賦值;
3、四種許可權修飾符:
default是可以省略的
public > protected > (default) > private
同一類 ok ok ok ok
同一包 ok ok ok
不同包子類 ok ok
不同包非子類 ok
例:同一包不同類之間的訪問:
public class myanother
}public class myclass
4、內部類
乙個事物的內部包含另乙個事物,那麼這就是乙個類內部包含另乙個類;
成員內部類
成員內部類格式:
修飾符 class 類名稱
}【注意】內用外,隨意使用,但是外用內,就需要內部物件
public class outter
} //外部類的方法
public void methodoutter()
}
訪問方式
【a】直接訪問
【外部類名稱.內部類名稱 物件名 = new 外部類名稱().new 內部類名稱();】
outter.inner methodinnera = new outter().new inner();
methodinnera.methodinner();
【b】間接訪問:通過定義外部類的物件,來呼叫外部類的成員方法,從而間接的使用內部類的成員方法;
public class demoinnerclass
}
【內類和外部類的位元組碼檔案格式】
outter.class 外部類class檔案
outter$inner.class 內部類class檔案
【c】內部類的同名變數
public class outer
}}
由於內外部類的知識還沒有學習完,明日繼續更新這部分的知識點,餘留的作業明天做完,整理一下問題筆記,總結之前的知識點,多練習多敲**。學習之路-共勉 以馬內利
python成長之路day14
1 什麼是裝飾器 器指的是工具 裝飾指的是為被裝飾物件新增額外的功能 大白話 定義裝飾器就是定義了乙個函式,該函式就是用來為其他函式新增額外的功能 2 為何要用裝飾器 程式的開發徐亞哦遵循乙個原則 開放封閉原則 開放 值得是對拓展功能開放 封閉 指的是對修改源 封閉 def func sdfasd ...
C 學習筆記 day14
1 對檔案的分類 1 文字檔案 每個位元組都是有效的可顯示的ascii碼,getline 2 二進位制檔案 位元組是連續的,不能用vi more檢視檔案內容,read按位元組數讀取 write 100 是整數的100,佔4個位元組 100 是字元陣列,佔3個位元組 2 異常 1 人為錯誤 由於程式設...
產品助理day14
一 今日工作 1 補昨天的坑 去掉多餘的字段,新增乙個代表狀態的字段!從而根據狀態明確知道什麼時候是成交的金額,在此之前的都是預估金額 二 今日收穫 1 最近的心病,對應用了解的廣度不夠 2 下手之前先想好,就像寫作文打草稿一樣,另外,要多分析競品 三 今日產品學習 收穫 先來個段子吧 正文 1 產...