抽象類
如果一個(gè)類沒有足夠的信息來描述一個(gè)具體的對象,而需要其他具體的類來支撐它,那么這樣的類我們稱它為抽象類。比如new Animal(),我們都知道這個(gè)是產(chǎn)生一個(gè)動(dòng)物Animal對象,但是這個(gè)Animal具體長成什么樣子我們并不知道,它沒有一個(gè)具體動(dòng)物的概念,所以他就是一個(gè)抽象類,需要一個(gè)具體的動(dòng)物,如狗、貓來對它進(jìn)行特定的描述,我們才知道它長成啥樣。
在使用抽象類時(shí)需要注意幾點(diǎn):
1、抽象類不能被實(shí)例化,實(shí)例化的工作應(yīng)該交由它的子類來完成,它只需要有一個(gè)引用即可。
2、抽象方法必須由子類來進(jìn)行重寫。
3、只要包含一個(gè)抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。
4、抽象類中可以包含具體的方法,當(dāng)然也可以不包含抽象方法。
5、子類中的抽象方法不能與父類的抽象方法同名。
6、abstract不能與final并列修飾同一個(gè)類。
7、abstract 不能與private、static、final或native并列修飾同一個(gè)方法。
代碼如下:
/**
* abstract 修飾的方法,要求非抽象子類必須實(shí)現(xiàn)基類里的抽象方法
* 只要類中存在抽象方法,要求該類必須是抽象類
*/
public abstract /*使用關(guān)鍵字修飾的類為抽象類*/class Animal {
public void eat(){
System.out.println("eat");
}
//abstract修飾的方法叫抽象方法
public abstract void howl();
}
public class Dog extends Animal {
@Override
public void howl() {
System.out.println("wang wang");
}
public void yao(){
System.out.println("yao");
}
}
public class Cal extends Animal {
@Override
public void howl() {
System.out.println("miao miao");
}
}
public class Main {
public static void main(String[] args) {
// write your code here
Dog dog = new Dog();
dog.howl();
Animal animal = new Cal();
animal.howl();
}
}