java abstract 關鍵字 抽象方法和抽象類的使用詳解
阿新 • • 發佈:2018-11-05
java abstract 關鍵字 抽象類 抽象方法 的使用詳解
1.關鍵字
- 關鍵字abstract:抽象的,可以用來修飾類、修飾方法
2.抽象類
- 隨著繼承層次中一個個新子類的定義,類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特徵,有時將父類設計得非常得抽象以至於它沒有具體的例項,這樣的類就叫做抽象類。也可以總結為:抽象類是用來模型化那些父類無法確定全部實現,而是由其子類提供具體實現的物件的類。
- 抽象類使用需注意的點
①不可被例項化
②抽象類有構造器(凡是類都有構造器)
③抽象方法所在的類,一定是抽象類
④抽象類中可以沒有抽象方法。
3.抽象方法
- 抽象類中只表明方法,沒有方法體的方法,主要用於宣告方法功能,交由子類去重寫(覆蓋),實現去其功能。
- 抽象方法使用需注意的點
①格式:沒有方法體,包括{};如:public abstract void eat();
②抽象方法只保留方法的功能,而具體的執行,交給繼承抽象類的子類,由子類重寫此抽象方法
③若子類繼承抽象類,並重寫了所有的抽象方法,即這個子類是一個“實體類”,即可以例項化
④若子類繼承抽象類,沒有衝寫所有的抽象方法,意味著子類仍有抽象方法,則宣告必須為abstract的!
3.demo
public class TestAbstract { public static void main(String[] args) { // Person p1 = new Person(); // p1.eat(); Student s1 = new Student(); s1.eat(); Person p = new Student();//多型 p.eat(); } } abstract class Person{ String name; public abstract void eat(); public abstract void walk(); public Person() { } //不是抽象方法!只是沒有方法體 public void sleep() { } public Person(String name) { this.name = name; } } class Student extends Person{ public void eat() { System.out.println("student eat"); } public void walk() { System.out.println("student walk"); } } abstract class Worker extends Person{ public void eat() { System.out.println("worker eat"); } // public void walk() { // System.out.println("worker walk"); // } }
4.abstract不能用來修飾屬性、構造器、private、final、static
- dome
abstract class A{
// 對於類來講,它能夠例項化,因為它有構造器,對於方法來講,它能夠被子類重寫。
// 但在多型中的體現,並不包括屬性,具體調取屬性的,看的是引用是什麼,屬性無法覆蓋。
// abstract int name;
// public abstract A() {
// //因為構造器不能被重寫
// }
// private abstract void method1();//子類不能覆蓋父類中宣告為private的方法
// public abstract final void method1();//一個不讓重寫,一個又讓重寫,所以本身本來就矛盾
// 類方法可以類還沒有例項化的時候呼叫,但abstract修飾的本身就沒有方法體
// public abstract static void method3();
}