Java中的abstract方法和abstract類
abstract修飾符用來修飾類和成員方法
1:用abstract修飾的類表示抽象類,抽象類位於繼承樹的抽象層,抽象類不能被實例化。
2:用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但不提供具體的實現。
abstract 規則:
1:抽象類可以沒有抽象方法,但是有抽象方法的類必須定義爲抽象類,如果一個子類繼承一個抽象類,子類沒有實現父類的所有抽象方法,那麼子類也要定義爲抽象類,否則的話編譯會出錯的。
2:抽象類沒有構造方法,也沒有抽象靜態方法。但是可以有非抽象的構造方法
3:抽象類不能被實例化,但是可以創建一個引用變量,類型是一個抽象類,並讓它引用非抽象類的子類的一個實例
4:不能用final 修飾符修飾
Code:
/*
抽象類:
目前存在的問bai題:
1. 動物類的durun方法描述的不正確zhi。
2. 沒有強制要子類一定要重寫run方法。
抽象類的應用場景:
我們在描述一類事物的時候,發現該種事物確實存在着某種行爲,
但是這種行爲目前是不具體的,那麼我們可以抽取這種行爲 的聲明,但是
不去實現該種行爲,這時候這種行爲我們稱作爲抽象的行爲,我們就需要使用抽象類。
抽象類的好處: 強制要求子類一定要實現指定的方dao法。
抽象類要注意的細節:
1. 如果一個函數沒有方法體,那麼該函數必須要使用abstract修飾,把該函數修飾成抽象 的函數。。
2. 如果一個類出現了抽象的函數,那麼該類也必須 使用abstract修飾。
3. 如果一個非抽象類繼承了抽象類,那麼必須要把抽象類的所有抽象方法全部實現。
4. 抽象類可以存在非抽象方法,也可以存在抽象的方法.
5. 抽象類可以不存在抽象方法的。
5. 抽象類是不能創建對象的。
疑問:爲什麼抽象類不能創建對象呢?
因爲抽象類是存在抽象方法的,如果能讓抽象類創建對象的話,那麼使用抽象的對象
調用抽象方法是沒有任何意義的。
6. 抽象類是存在構造函數的,其構造函數是提供給子類創建對象的時候初始化父類的屬性的。
*/
//動物類--->抽象類
abstract class Animal{
String name;
String color;
public Animal(String name,String color){
this.name = name;
this.color = color;
}
//非抽象的方法
public void eat(){
System.out.println(name+"喫糧食");
}
//移動...
public abstract void run();
}
//狗 是屬於動物中一種
class Dog extends Animal{
public Dog(String name,String color){
super(name,color);
}
public void run(){
System.out.println(name+"四條腿跑得很快...");
}
}
//魚 是屬於動物中一種
class Fish extends Animal{
public Fish(String name,String color){
super(name,color);
}
public void run(){
System.out.println(name+"搖搖尾巴游啊遊!");
}
}
class Demo3 {
public static void main(String[] args)
{
/*
Dog d = new Dog("牧羊犬","棕色");
d.run();
//創建一個魚對象
Fish f = new Fish("錦鯉","金黃色");
f.run();
*/
Animal a = new Animal();
}
}