多态抽象類接口
-
-
- 1:final關鍵字可以幹什麼?有什麼特點?
- 2:final關鍵字的面試題?
- 3:多态是什麼,前提是什麼?
- 4:多态中成員通路的特點?
- 5:多态的好處及弊端?如何解決多态的弊端?
- 6:什麼是向上轉型?什麼是向下轉型?
- 7:多态練習
- 8:抽象類概述及其特點?
- 9:抽象類成員特點?
- 10:抽象類練習?
- 11:抽象類的小問題
- 12:接口的概述及其特點?
- 13:接口的成員特點?
- 14:接口的練習
- 15:抽象類和接口的差別?
- 16:案例
-
1:final關鍵字可以幹什麼?有什麼特點?
修飾類、方法、屬性和變量
- final 修飾類,則該類不允許被繼承,為最終類
- final 修飾方法,則該方法不允許被覆寫(重寫)
- final 修飾屬性:則該類的屬性不會進行隐式的初始化(類的初始化屬性必須有值)或在構造方法中指派(但隻能選其一)
- final 修飾變量,則該變量的值隻能賦一次值,即常量
2:final關鍵字的面試題?
A:修飾局部變量
B:初始化時機
a:基本類型 值不能發生改變
b:引用類型 位址值不能發生改變,但是對象的内容是可以改變的
a:隻能初始化一次
b:常見的給值
定義的時候(推薦)
構造方法中
3:多态是什麼,前提是什麼?
- 允許不同類的對象對同一消息做出響應
- 同一個對象在不同時刻展現出來的不同狀态
A:有繼承或者實作關系
B:有方法重寫
C:有父類或者父接口引用指向子類對象 (向上轉型)
4:多态中成員通路的特點?
成員變量
成員方法
靜态方法
A:成員變量
編譯看左邊,運作看左邊
B:構造方法
子類的構造都會預設通路父類構造
C:成員方法
編譯看左邊,運作看右邊
D:靜态方法
編譯看左邊,運作看左邊
為什麼?
因為成員方法有重寫
5:多态的好處及弊端?如何解決多态的弊端?
多态的好處:
A:提高代碼的維護性(繼承展現)
B:提高代碼的擴充性(多态展現)
多态的弊端:
父不能使用子的特有功能
現象:子可以當作父使用,父不能當作子使用
6:什麼是向上轉型?什麼是向下轉型?
A:向上轉型
從子到父
B:向下轉型
從父到子
強轉符 ()
Man m = (Man)p;
可能ClassCastException異常
使用instanceof在進行向下轉型前判斷
if(p instnceof Man) {
Man m = (Man)p;
}
7:多态練習
class Animal {
//父類方法
public void bark() {
System.out.println("動物叫!");
}
}
class Dog extends Animal {
//子類重寫父類的bark方法
public void bark() {
System.out.println("汪、汪、汪!");
}
//子類自己的方法
public void dogType() {
System.out.println("這是什麼品種的狗?");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
Animal b = new Dog();
Dog d = new Dog();
a.bark();
b.bark();
//b.dogType();
//b.dogType()編譯不通過
d.bark();
d.dogType();
}
}
8:抽象類概述及其特點?
在定義類時,前面加上 abstract 關鍵字修飾的類叫抽象類
抽象就是看不懂的
A:抽象類和抽象方法必須用關鍵字abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能執行個體化
D:抽象類的子類
a:是一個抽象類
b:是一個具體類這個類必須重寫抽象類中的所有抽象方法
9:抽象類成員特點?
A:成員變量
有變量,有常量
B:構造方法
有構造方法
C:成員方法
有抽象,有非抽象
10:抽象類練習?
// 抽象方法
public abstract class TelePhone {
public abstract void call(); //抽象方法,打電話
public abstract void message(); //抽象方法,發短信
}
// 建構子類,并實作抽象方法
public class CellPhone extends TelePhone {
@Override
public void call() {
System.out.println("我可以打電話!");
}
@Override
public void message() {
System.out.println("我可以發短信!");
}
public static void main(String[] args) {
CellPhone cp = new CellPhone();
cp.call();
cp.message();
}
}
11:抽象類的小問題
A:一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什麼意義?
B:[abstract不能和哪些關鍵字共存](https://blog.csdn.net/qq_29842929/article/details/53536807)
可以 不讓建立對象
a:final 沖突
b:private 沖突
c:static 無意義
12:接口的概述及其特點?
接口用于描述類所具有的功能,而不提供功能的實作,
功能的實作需要寫在實作接口的類中,并且該類必須實作接口中所有的未實作方法
A:接口用關鍵字interface修飾
interface 接口名 {}
B:類實作接口用implements修飾
class 類名 implements 接口名 {}
C:接口不能執行個體化
D:接口的實作類
a:是一個抽象類
b:是一個具體類,這個類必須重寫接口中的所有抽象方法
13:接口的成員特點?
A:成員變量
隻能是常量
預設修飾符:public static final
B:構造方法
沒有構造方法
C:成員方法
隻能是抽象的
預設修飾符:public abstract
14:接口的練習
// Cat.java
public class Cat implements Animal{
public void eat(){
System.out.println("Cat eats");
}
public void travel(){
System.out.println("Cat travels");
}
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.travel();
}
}
15:抽象類和接口的差別?
差別
A:成員差別
抽象類:
接口:
B:關系差別:
類與類:
類與接口:
接口與接口:
C:設計理念不同
抽象類:is a,抽象類中定義的是共性功能
接口:like a,接口中定義的是擴充功能
相同:
都不能建立對象
都可以定義抽象方法,并且一定要在子類中重寫
不同:
關鍵字不同abstract interface
抽象方法中既可以有抽象的方法也可以有普通的方法
接口中中所有的方法都是抽象方法
抽象類的方法可以任意權限,接口中方法隻能是public
抽象類隻能單繼承,接口可以多實作
16:案例
[貓狗案例,加入跳高的額外功能](https://blog.csdn.net/dai_ma_dong/article/details/95896248)
[老師和學生案例,加入抽煙的額外功能](https://blog.csdn.net/qq_23973805/article/details/79121017)
[教練和運動員案例(學生分析然後講解)](https://blog.csdn.net/lcn_Lynn/article/details/74989842)