有些類並不能真正的去描述一個對象,只是將子類相似的特點抽象出來,形成了一個類的模板,這種類稱為抽象類。用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修飾的方法稱為抽象方法
-
沒有方法體,給子類重寫;
-
抽象類中可以沒有抽象方法;
-
定義了抽象方法的類一定要定義為抽象類;
-
繼承了抽象類的子類,一定要實現其抽象方法;
- 除非該類也為抽象類
-
本人水平有限,若有錯誤和不足,望指正~