2021年7月28日
講師:王博
-今日內容:
·final關鍵字【重點】
·介面【重點】
·多型【重點】
·static關鍵字【重點】
1final關鍵字
字面意思:最終的,最後的
用法:
·fianl可以修飾成員變數
使用final修飾成員變數的時候,必須進行賦值(初始化),賦值以後,這個值就不能更改了
·final可以修飾區域性變數
區域性變數使用final修飾的時候可以不賦值,使用final修飾的區域性變數一旦被賦值,就不可以被修改
·final可以修飾成員方法
Final修飾的成員方法,子類不能重寫!
·final可以修飾類
Final修飾的類,不能被繼承
2介面
2.1生活中的介面
Usb
插座
擴充套件功能!!!
2.2java中的介面
語法格式:
Interface 介面名{
成員屬性;//在很少有
成員方法;
}
注意事項:
·介面下面可以宣告成員屬性,但是要賦值,因為預設被final修飾
·介面下面的方法必須都是抽象方法,abstract是預設的
·介面不能被例項化
·介面必須使用一個類去實現它(implements)
·必須重寫介面中所有的抽象方法
·可以實現多個介面,相當於實現了多繼承
·java8及以上的版本可以寫預設的方法,這個方法帶有方法體(帶default)
2.3抽象類和介面的區別【面試題】
·介面的方法都是抽象方法,抽象類可以有非抽象方法
·類可以實現多個介面,但是隻能繼承一個抽象類
·類如果要實現一個介面的話,必須要實習它所有的抽象方法
類如果要繼承一個抽象類的話,可以不必重寫非抽象方法
·抽象類去實現介面,介面的方法在抽象類中可以不強制重寫
·javajava8及以上的版本可以寫預設的方法,這個方法帶有方法體(帶default)
2.4介面的案例
3多型【重要】
封裝 繼承 多型
父類的引用指向子類的物件
Fater son 其中Father是Son類的父類
Father father= new Son();
為什麼要使用多型的一種寫法:
多型的使用可以讓咱們的程式碼變的更加的靈活,簡潔,具有普適性
3.1多型案例
見資料夾e_duotai f_duotai
3.2
父子物件之間的轉換分為向上轉型和向下轉型,他們的區別如下:
向上轉型:通過子類物件(小範圍)去例項化父類物件(大範圍),屬於自動轉換【父類的物件引用子類的物件】,小範圍轉為大範圍 是自動轉的
向下轉型:通過父類的物件(大範圍)去例項化子類的物件(小範圍),屬於強制轉換
3.2.1向上轉型
A a = new B();//向上轉型,父類的引用指向子類的物件
//通過子類去例項化父類
a.test();
//意義:當我們需要對方法進行傳引數的時候,這個引數可以是父類的物件,但是真實的引數是子類的物件
3.2.2向下轉型【瞭解】
在java中,向下轉型是為了通過父類強制轉換成子類,從而可以呼叫子類獨有的方法
向下轉型在真實的專案中很少,幾乎不用!!!
向下轉型是為了呼叫子類獨有的方法
package com.liujinghe.g_change;
class A1{
public void test(){
System.out.println("A1:test");
}
}
class B1 extends A1{
@Override
public void test() {
System.out.println("B1:test");
}
public void funcB(){
System.out.println("funcB");
}
}
class C1 extends A1{
@Override
public void test() {
System.out.println("C:test");
}
public void funcC(){
System.out.println("funcC");
}
}
public class Test1 {
public static void main(String[] args) {
// A1 a1 = new B1();//B1是A1的一個子類
// System.out.println(a1 instanceof A1);
// System.out.println(a1 instanceof B1);
A1 a1 = new A1();
func(a1);
}
public static void func(A1 a1){
a1.test();
if(a1 instanceof B1){
//語法格式
//子類 子類變數名字=(子類)父類物件
B1 b1 = (B1) a1;//強制轉換 獲得子類特有的方法,要獲取子類的物件
//但是你的引數是父類的a1 a1變成b1 只能強轉
b1.funcB();
}else if(a1 instanceof C1){
C1 c1 =(C1)a1;
c1.funcC();
}
}
}
總結:
父轉子,需要強制型別轉換,目的是呼叫子類獨有的方法
子轉父,自動轉換,啥也不需要,但是不可以呼叫子類獨有的方法
作業:
·程式碼敲三次
·書面作業
默寫抽象類和介面的區別
默寫多型的三個必要條件
默寫多型的優點
默寫final關鍵字的用法
·作業
背:
抽象的意義
抽象類和介面的區別
多型表現在哪裡
什麼是多型