abstract 關鍵字可以修飾類或方法。
abstract 類可以擴充(增加子類),但不能直接執行個體化。
abstract 方法不在聲明它的類中實現,但必須在某個子類中重寫。
樣本
public abstract class MyClass { }
public abstract String myMethod();
注釋
採用 abstract 方法的類本來就是抽象類別,並且必須聲明為
abstract。
abstract 類不能執行個體化。
僅當 abstract 類的子類實現其超類的所有
abstract 方法時,才能執行個體化 abstract 類的子類。這種類稱為具體類,以區別於 abstract 類。
如果 abstract 類的子類沒有實現其超類的所有
abstract 方法,該子類也是 abstract 類。
abstract 關鍵字不能應用於 static、private 或
final 方法,因為這些方法不能被重寫,因此,不能在子類中實現。
final 類的方法都不能是 abstract,因為
final 類不能有子類。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
abstract作為修飾符,可以修飾類和方法。
1.抽象類別: 不能手動建立對象(JVM可以建立抽象類別的對象),但是可以聲明抽象類別型的引用。
public class TestAbstract1{ public static void main(String[] args){ //Animal a=new Animal(); //error Animal a=null; a=new Dog(); } } abstract class Animal{ } class Dog extends Animal{ } |
2.抽象方法:有方法名的定義,沒有實現,(只定義了能做什麼,沒定義怎麼做)
抽象方法的好處是允許方法的定義和實現分開。
abstract class Animal{ public abstract void eat(); } |
抽象類別和抽象方法的關係:含有抽象方法的類一定是抽象類別,抽象類別裡不一定含有抽象方法
抽象類別存在的意義是用來被繼承的。一個類繼承了一個抽象類別,必須實現抽象類別裡面所有的抽象方法,否則,此類也是抽象類別。
abstract class Animal{ public void run(){} public abstract void sleep(); public abstract void eat(); } class Dog extends Animal{ public void sleep(){ System.out.println("Dog sleep."); } public void eat(){ System.out.println("Dog eat."); } } abstract class Cat extends Animal{ public void eat(){ System.out.println("Cat eat."); } } |
可以聲明父類類型子類對象,利用多態調用抽象方法
public class TestAbstract1{ public static void main(String[] args){ Animal a=null; a=new Dog(); a.sleep(); a.eat(); } } |
抽象類別有構造方法,有父類的,也遵循單繼承的規律
class E{} abstract class Animal extends E{ public Animal(){ super(); } } |