Java關鍵字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{ Animal a=null; |
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(); } } |