Java面向對象的三大特點:繼承、封裝、多態
繼承
繼承的起源
使用“is a”關系判斷繼承
Java中繼承的實現
關鍵字:extends
實例化子對象
單繼承和多繼承
子類繼承父類、父類還可以繼承上一個類,稱為傳遞繼承。
Dog extends Animal;
Animal extends ShengWu;
所有類的根類Object
即object類是所有類的父類,object中所有的方法其他類都可以直接調用
方法重寫
父類方法 Public void jiao(){system.out.print(“叫”)}
子類方法 Public void jiao(){system.out.print(“汪汪叫”)}
super關鍵字
super. 父類屬性
this關鍵字
this.當前類屬性
final關鍵字
final所修飾的類不可以被繼承;所修飾的方法不可以被重寫
實例化過程
調用父類的構造器
封裝
訪問修飾符
Public公共的:在任何一個地方都可以調用
protected 受保護的:在同意包中可以訪問,或者不同胞中原類的子類中可以調用
default 默認的:同一包中可以使用,不寫出修飾符
private 私有的:只有當前類可以使用
封裝可以提高代碼的重用性,提高代碼的可移植性,可以隱藏實現細節
修飾類只能是public或者default
理解靜態成員
static 靜態的
靜態方法不能訪問實例成員
靜態初始化塊
static{
語句體;
}
實例初始化塊
靜態塊在對象實例化的時候只會執行一次,所以可以用來給定對象的初始值
Javabean原則:實體類屬性通常使用private修飾,通過set和get函數去設置和獲取數據。
多態
向上轉型自動轉換 例如:Animal dog=new Dog();
父類對象的引用指向了子類對象的實例,向上轉型后子類多特有的屬性和方法就無效了。
如果子類重寫了父類的方法,則調用子類的方法。
向下轉型,類型還原 例如:Animal animal=new Dog();
子類特有的屬性和方法就還原了 Dog dog=(Dog)animal;
instanceof animal instanceof Dog
在多態中,子類可以調用父類的所有方法(父類私有方法除外)。
abstract抽象的,不具備實際功能實現的,用來規范子類,只能修飾方法,抽象方法只能定義在抽象類里面,抽象類不能被實例化。子類必須實現這個方法,即子類必須重寫父類的抽象方法。
public abstract class Animal{ 代碼體 }
接口
接口里面都是抽象方法,接口必定是抽象類
接口聲明
public interface 接口名{ }
接口實現
接口需要重新定義一個類來實現里面的方法
public class 類名 implements 接口名
如果是子類來實現接口:
public class 子類名 extends 父類名 implements 接口名{ }
接口應用
接口可以用於暴露類的行為,允許類的用戶通過接口的實現來使用接口中的方法。
接口可以用於強制一個類具有某些行為。
在接口中聲明成員變量
接口可以包含成員變量,但是成員變量只能用static和final關鍵字共同來修飾。由於接口不能被實例化,所以成員變量必須被聲明為static,而聲明為final是為了程序的可靠性。
Final屬性在聲明時就必須賦值。
接口繼承
接口的繼承同樣是通過關鍵字extends
接口可以同時有多個。 implements 接口1,接口2…接口n
接口與多態
接口與抽象類的區別
二者都不能被實例化,用於被其他類實現或者繼承。
二者都可以包含抽象方法,實現接口或者繼承抽象類的子類都必須實現這些抽象方法。
區別:接口只能包含抽象方法,而抽象類可以包含普通方法。
接口不能定義靜態方法,而抽象類可以定義。
接口只能定義靜態常量屬性,不能定義普通屬性。而抽象類可以定義普通屬性,也可以定義靜態常量屬性。
接口不包含構造器。抽象類里面的構造器做初始化工作。
接口中不包含初始化塊。而抽象類可以包含初始化塊。
一個類最多只有一個直接父類,包括抽象類;但是一個類可以直接實現多個接口,通過實現多個接口來彌補java單繼承的不足。