abstract


有些類並不能真正的去描述一個對象,只是將子類相似的特點抽象出來,形成了一個類的模板,這種類稱為抽象類。用abstract修飾。

1.什么是abstract?

abstract的意思是抽象的,用於修飾方法、類。

2.abstract的用法

(1)abstract修飾類

被abstract修飾的類稱為抽象類。

抽象類只是一個更特殊的類,抽象類也擁有普通類的基本特性,在抽象類中可以使用4個權限修飾符,任意定義屬性和方法,抽象類也有構造方法;

package com.dh.abstractdemo;

//使用abstract修飾類
public abstract class AbstractDemo {

    //可以使用4個權限修飾符
    public String name;
    int age;

    public AbstractDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println("抽象類的普通方法");
    }
}

下面就是抽象類的特殊性了:

抽象類只能被繼承,不能實例化對象;

書寫一個類繼承上述抽象類:

package com.dh.abstractdemo;

public class Test extends AbstractDemo {

    public Test(String name, int age) {
        super(name, age);
    }
}

可以看到是沒有問題的。

我們再看看能不能實例化對象:

可以看到抽象類是不能實例化對象的,抽象類的作用就是充當一個類的模板,給其它的類繼承。

但是,繼承抽象類的子類是可以實例化對象的。

(2)abstract修飾方法

被abstract修飾的方法叫抽象方法,子類如果繼承的是抽象類,必須重寫其抽象方法,除非子類也是抽象方法。

注意:抽象方法是沒有方法體的!用於給子類重寫。

package com.dh.abstractdemo;

//使用abstract修飾類
public abstract class AbstractDemo {

    public String name;
    public int age;

    public AbstractDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println("抽象類的普通方法");
    }

    //抽象方法沒有方法體,用於給子類重寫
    public abstract void abstractMethod();
}

如果子類不重寫父類的抽象方法就會報錯:

可以直接點擊藍色的Implement methods在子類中生成重寫的方法:此時不再報錯

如果子類也是抽象類,就不是必須要實現父類的抽象方法了:

我們在(1)中看到,abstract類中是可以不書寫abstract方法的,那書寫了abstract方法,但是不定義成abstract類可以嗎?

答案是no,書寫了抽象方法就一定要將該抽象方法所在的類定義成抽象類。

3.總結

  • abstract修飾的類稱為抽象類

    • 可以使用4種權限符定義屬性和方法;

    • 擁有構造方法;

    • 可以被繼承,不能實例化對象;

    • 繼承抽象類的子類,可以實例化對象;

  • abstract修飾的方法稱為抽象方法

    • 沒有方法體,給子類重寫;

    • 抽象類中可以沒有抽象方法;

    • 定義了抽象方法的類一定要定義為抽象類;

    • 繼承了抽象類的子類,一定要實現其抽象方法;

      • 除非該類也為抽象類

本人水平有限,若有錯誤和不足,望指正~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM