Java知識點總結【6】抽象類和介面
阿新 • • 發佈:2021-01-25
1.抽象類
1)什麼是抽象類
抽象的反義詞是具體,越不具體,就越抽象。abstract修飾的類就叫做抽象類,除了不能被例項化之外!其他語法規則和普通類都一樣。
abstract關鍵字存在的意義,就是讓程式設計師明確的告訴編譯器,這個類是一個抽象的類,不應該進行例項化,於是編譯器就要做好相關檢查工作。
2)什麼是抽象方法
- 給方法前頭加上 abstract 此時這就是一個抽象方法了.
- 抽象方法不需要方法體.
- 抽象方法只能在抽象類中存在(也可以在介面中存在), 不能在普通的類中存在.
- 抽象方法存在的意義就是為了讓子類進行重寫.
3)舉例
abstract class Animal{ //抽象類 public abstract void eat(); //抽象方法 } public class Blog { public static void main(String[] args) { Animal animal=new Animal(); } }
執行結果:
2.介面
1)什麼是介面
我們知道,類之間只能單繼承。為了實現類似“多繼承”的效果,所以就引入了介面。介面是抽象類的更近一步,比抽象類還抽象。抽象類只是不能例項化,但是其他各個方面都和普通類差不多,介面就更抽象了,不光不能例項化,同時也不具備類的各種特性。
命名:介面的命名一般以大寫字母I作為字首,一般使用形容詞進行命名。表示的語義:一個類具有XXX特性
2)舉例
①介面中只能放抽象方法,不能放普通方法(下圖中的波浪線~)
介面中的抽象方法可以不寫public abstract關鍵字,寫或者不寫,都表示抽象的共有的方法~
但是抽象類中的抽象方法必須得寫abstract關鍵字,抽象類中除了可以放抽象方法還可以放普通方法,所以不寫得話就表示一個普通方法,就得加上方法體了。
②介面中只能放public static final修飾的屬性,不能放普通的屬性
interface IEating {
public static final String food = "fish";
}
③介面和類之間不能繼承,只能是類實現了(implements)某個介面。介面和介面之間可以繼承。
Animal類
public class Animal {
}
IEating介面
public interface IEating { public static final String food = "fish"; public abstract void eat(); }
IJump介面
public interface IJump {
void jump();
}
Cat類繼承自Animal類,實現了IEating,IJump介面
public class Cat extends Animal implements IEating,IJump{
@Override
public void eat() {
}
@Override
public void jump() {
}
}
注意:
- 實現的類必須重寫介面中所有的方法。
- 實現多個介面,介面之前使用逗號分割。
3.抽象類和介面的對比
- 抽象類和普通類差不多,只是不能例項化。而介面和普通的類之間相去甚遠(包含的屬性,方法,和其它類的關係)
- 一個類只能繼承自一個抽象類,但是一個類可以同時實現多個介面。
為啥要發明介面這樣的語法?
解決Java中不能多繼承的問題。Java中的繼承是單繼承,有些場景下多繼承是有用的。Java中可以通過繼承一個類,實現多個介面的方式來完成類似於多繼承的效果。