1. 程式人生 > 其它 >2021年7月28日

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 其中FatherSon類的父類

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();//B1A1的一個子類
// 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關鍵字的用法

·作業

背:

抽象的意義

抽象類和介面的區別

多型表現在哪裡

什麼是多型