/*
抽象類:
什么是時候使用抽象類:
描述一類事物的時候,發(fā)現該事物確實存在著某種 行為,但是 目前這種
是不具體的,這時候應該抽取這種行為的聲明,而不去實現該種行為,這時候
這種行為我們把它稱為抽象的行為,這時候應該使用抽象類。
抽象類要注意的細節(jié):
1. 如果一個方法沒有方法體,那么該方法必須使用abstract修飾。
2. 如果一個類含有抽象方法,那么這個類肯定是一個抽象類或者接口。
3. 抽象類不能創(chuàng)建對象。
4. 抽象類是含有構造方法的。
5. 抽象類可以存在非抽象方法與抽象方法。
6. 抽象類可以不存在抽象方法。
7. 非抽象類繼承抽象類的時候,必須要把抽象類中所有抽象方法全部實現。
abstract不能與以下關鍵字一起使用
1.abstract 不能與static共同修飾一個方法。
2. abstract 不能與private共同修飾一個方法。
3. abstract不能以final關鍵字共同修飾一個方法。
接口:
接口的定義格式:
interface 接口名{
成員變量
成員函數..
}
接口的作用:
1. 程序解耦。
2. 定義約束規(guī)范
3. 拓展功能。
接口要注意的細節(jié):
1. 接口中成員變量都是常量,默認 的修飾符是 public static fianl.
2. 接口中的方法全部都是抽象的方法,默認的修飾符: public abstract。
3. 接口不能創(chuàng)建對象。
4. 接口是沒有構造函數的。
5. 非抽象類通過implements實現接口的時候,必須要把接口中所有方法全部實現。
接口與類之間 的關系: 實現關系。
注意: 一個類可以實現多個接口。
接口與接口之間的關系: 繼續(xù)關系。
注意: 一個接口是可以繼承多個接口的。
多態(tài):父類的引用類型變量指向了子類的對象,或者是接口的引用類型變量指向了接口實現類的對象。
多態(tài)要注意細節(jié):
1. 多態(tài)情況下,如果子父類存在同名的成員變量時,訪問的是父類的成員變量.
2. 多態(tài)情況下,如果子父類存在同名的非靜態(tài)函數時,訪問的是子類 的成員函數。
3. 多態(tài)情況下,如果子父類存在同名的靜態(tài)函數時,訪問的是父類的成員函數。
4. 多態(tài)情況下, 不能訪問子類特有的成員。
多態(tài)的應用:
1.多態(tài)用于形參類型的時候,可以接收更多類型的數據
2. 多態(tài)用于返回值類型的時候,可以返回更多類型的數據.
*/
/*
目前多態(tài)情況下不能訪問子類特有的成員。
如果需要訪問子類特有的成員,那么需要進行類型強制轉換.
基本數據類型的轉換
小數據類型-------->大的數據類型 自動類型轉換 (向上轉型)
大數據類型--------->小數據類型 強制類型轉換 (向下轉型)
引用數據類型的轉換
小數據類型--------->大數據類型 自動類型轉換。
大數據類型--------->小數據類型 強制類型轉換
類型轉換最場景的問題: java.lang.ClassCastException。 強制類型轉換失敗。
*/
//動物類
abstract class Animal{
String name;
public Animal(String name){
this.name = name;
}
public abstract void run();
}
//老鼠
class Mouse extends Animal{
public Mouse(String name){
super(name);
}
public void run(){
System.out.println(name+"四條腿慢慢的走!");
}
//老鼠特有方法---打洞
public void dig(){
System.out.println("老鼠在打洞..");
}
}
//魚
class Fish extends Animal{
public Fish(String name){
super(name);
}
public void run(){
System.out.println(name+"搖搖尾巴游啊游 !");
}
//吹泡泡
public void bubble(){
System.out.println(name+"吹泡泡...!");
}
}
class Demo2
{
public static void main(String[] args)
{
/*
Animal a = new Mouse("老鼠"); //多態(tài)
//調用子類特有的方法
Mouse m = (Mouse)a; //強制類型轉換
m.dig();
*/
Mouse m = new Mouse("米老鼠");
Fish f = new Fish("草魚");
print(f);
}
//需求: 定義一個函數可以接收任意類型的動物對象,在函數內部要調用到動物特有的方法。
public static void print(Animal a){ // Animal a = new Mouse("米老鼠");
if(a instanceof Fish){
Fish f = (Fish)a;
f.bubble();
}else if(a instanceof Mouse){
Mouse m = (Mouse)a;
m.dig();
}
}
}
java 抽象類接口多態(tài)
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- final關鍵字 被其修飾的類,不能被繼承。 被其修飾的方法,不能被覆蓋。 被其修飾的變量,是一個常量,不能被修改...
- 抽象類:強調的是把共同(共有、相同)的屬性方法, 抽象出來,統(tǒng)一寫在一個地方(他們的實現代碼是一樣的),方便維護。...
- 9.0 Java面向對象三大特性 封裝、繼承、多態(tài)。從一定角度來看,封裝和繼承幾乎都是為多態(tài)而準備的 多態(tài)概念:指...
- 接口可以繼承接口。抽象類可以實現(implements)接口,抽象類可以繼承具體類。抽象類中可以有靜態(tài)的main方...
- 多態(tài):父類的引用指向子類的對象;必須有繼承;Animal a = new Dog;instanceof 判斷一個對...