Java學習之路 day14

2021-08-29 18:51:40 字數 4193 閱讀 3179

接著昨天的多型知識點總結:

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 產...