JAVA封裝、繼承、多態


封裝

1、概念:

  將類的某些信息隱藏在類的內部,不允許外部程序訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。

2、好處:

a.只能通過規定的方法訪問數據

b.隱藏類的實例細節,方便修改和實現

3、封裝的實現步驟

①修改屬性的可見性——設為private

②創建getter/setter方法,用於屬性的讀寫

③在getter/setter方法中加入屬性控制語句,對屬性值的合法性進行判斷

繼承

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

要注意的是,在Java中的繼承是單繼承,也就是說一個兒子只能有一個爸爸

繼承的好處:

  子類擁有父類的所有屬性和方法(private除外)

  子類對父類代碼的復用

繼承的語法規則:

  class  子類  extends  父類    #如: class  Dog extends Animal{ ......  }

方法的重寫:

1、什么是方法的重寫:

  如果子類對繼承父類的方法不滿意,是可以重從寫父類繼承的方法,當調用時會優先調用子類的方法。

2、語法規則:

  返回值類型、方法名、參數類型及個數 都要與從父類繼承的方法相同,才叫方法的重寫。

繼承的初始化順序:

  若創建一個子類對象,系統會先創建父類的屬性進行初始化,再調用父類的構造方法,然后再創建子類的屬性進行初始化,最后調用子類的構造方法。

多態

多態指對象的多種引用形態,繼承是多態的前提

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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM