Java面向對象之三大特性

封裝

1、概念:
  將類的某些信息隱藏在類的內部,不允許外部程序訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。
2、好處:
a.只能通過規定的方法訪問數據
b.隱藏類的實例細節,方便修改和實現
3、封裝的實現步驟
①修改屬性的可見性——設爲private
②創建getter/setter方法,用於屬性的讀寫
③在getter/setter方法中加入屬性控制語句,對屬性值的合法性進行判斷

繼承
繼承是類與類的一種關係,例如:動物和狗的關係,動物是父類(或基類),狗是子類(或派生類

)。
要注意的是,在Java中的繼承是單繼承,也就是說一個兒子只能有一個爸爸
繼承的好處:
  子類擁有父類的所有屬性和方法(private除外)
  子類對父類代碼的複用
繼承的語法規則:
  class 子類 extends 父類    #如: class Dog extends Animal{ …  }
方法的重寫:
1、什麼是方法的重寫:
  如果子類對繼承父類的方法不滿意,是可以重從寫父類繼承的方法,當調用時會優先調用子類的方法。
2、語法規則:
  返回值類型、方法名、參數類型及個數 都要與從父類繼承的方法相同,才叫方法的重寫。
繼承的初始化順序:
  若創建一個子類對象,系統會先創建父類的屬性進行初始化,再調用父類的構造方法,然後再創建子類的屬性進行初始化,最後調用子類的構造方法。

多態
多態是同一個行爲具有多個不同表現形式或形態的能力。

多態的優點

  1. 消除類型之間的耦合關係
  2. 可替換性
  3. 可擴充性
  4. 接口性
  5. 靈活性
  6. 簡化性
    多態存在的三個必要條件
    繼承
    重寫
    父類引用指向子類對象

多態指對象的多種引用形態,繼承是多態的前提
1、引用多態
  父類的引用可以指向本類對象  Animal object1=new Animal();
  父類的引用可以指向子類對象  Animal object2=new Dog();
  注意:子類的引用不可以指向父類對象Dog object3=new Animal();
2、方法多態
  創建本類對象時,調用的方法爲本類的方法;
  創建子類對象時,調用的爲方法爲子類重寫的方法或者繼承的方法
  注意:本類對象不能調用子類的方法

引用類型轉換:

Dog dog=new Dog();  
Animal animal=dog();  //向上類型轉換:(不存在風險)
Dog dog2=(Dog)animal;  //向下類型轉換:(存在風險,可能出現數據溢出)
if(animal instenceof Cat){  //用instanceof運算符,來解決引用對象的類型,避免類型轉換的安全問題,返回布爾值,來判斷animal能否轉換爲Cat類型
  Cat cat=(Cat)animal;
}

抽象類:
規定子類必須實現某些方法,但不關注實現細節

a.abstract定義抽象類
b.abstract定義抽象方法,只有聲明,不需要實現,如:public abstract void demo();  //直接使用分號結尾即可,不能有{ }
c.包含抽象方法的類一定是抽象類(abstract)
d.抽象類中可以包含普通的方法,也可以沒有抽象方法
e.抽象類不能直接創建對象,可以定義引用變量
f.抽象類的子類必須實現父類中的所有抽象方法

接口:intreface
接口可以理解爲一種特殊的類,由全局常量和公共的抽象方法組成
接口定義了類所需要遵守的規範,接口中的方法類中都必須提供
接口可以有多個父接口
接口一般是需要被繼承和實現的,所以通常用public修飾,不能用protect和private
語法:
  [修飾符] interface 接口名 [extends 父接口1,父接口2,父接口3…] {    //如果接口或者接口內的方法不手動添加 abstract ,系統也會默認爲abstract
    零到多個常量定義…
    零到多個抽象方法的定義…
  }

通過類使用接口:implements
  [修飾符號] class 類名 extends 父類 implements 接口1,接口2…{
    …
  }

實現接口的多種方法:

	1、IAnimal demo = new Cat();  
  			demo.eat();
  2、Cat demo = new Cat();  demo.eat();
  3、(用匿名內部類的方式1)
    IAnimal demo = new IAnimal(){
       public void eat(){
       System.out.println("eat");
       }
    };
  4、(用匿名內部類的方式2)
    new IAnimal(){
      public void eat(){
       System.out.println("eat");
       }
    }.eat();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章