1. 程式人生 > >Java關鍵字abstract

Java關鍵字abstract

abstract 關鍵字可以修飾類或方法。

abstract 類可以擴充套件(增加子類),但不能直接例項化。

abstract 方法不在宣告它的類中實現,但必須在某個子類中重寫。

示例

  public abstract class MyClass
  {
  }
  
  public abstract String myMethod();
  

註釋

  • 採用 abstract 方法的類本來就是抽象類,並且必須宣告為 abstract

  • abstract 類不能例項化。

  • 僅當 abstract 類的子類實現其超類的所有 abstract 方法時,才能例項化 abstract 類的子類。這種類稱為具體類,以區別於 abstract

    類。

  • 如果 abstract 類的子類沒有實現其超類的所有 abstract 方法,該子類也是 abstract 類。

  • abstract 關鍵字不能應用於 staticprivatefinal 方法,因為這些方法不能被重寫,因此,不能在子類中實現。

  • 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();
}
}