1. 程式人生 > 其它 >JAVASE基礎03

JAVASE基礎03

技術標籤:介面封裝java

第三週筆記

三大特性

封裝

概念:

  • 儘可能隱藏方法的內部實現細節,控制物件的訪問修飾許可權;

訪問修飾符:

  • private(將屬性私有化,僅供本類使用)

提供方法:

  • 向外部提供公共的訪問修飾符public修飾的set方法賦值,與get方法對屬性的取值;

封裝的必要性:

  • 如果在物件的外部為屬性賦值時,提供的修飾符為預設的,那麼就會有非法的資料錄入;

總結:

  • 外界的引用無法直接方法例項中的屬性,而是通過訪問方法對屬性賦值以及取值,嚴格控制非法資料的錄入;

例如:

  • //使用private屬性修飾屬性,不提供外界訪問的機會;
    private String deptNo;
    private String name;
  • //對外界提供get+屬性名首字母大寫的方法為外界取值!
    public String getDeptNo() {
    	return deptNo;
    }
    //提供set方法給外界為屬性賦值
    public void setDeptNo(String deptNo) {
    	this.deptNo = deptNo;
    }
    public String getName() {
    	return name;
    }
    public void setName(String name) {
    	this.name = name;
    }
    

繼承

概念:

  • 程式中的繼承,是類與類之間特徵和行為的贈與或獲得;

語法:

  • class 子類名 extends 父類名{}//定義子類時,顯示父類;
    • //子類Cat繼承父類Animal;
      public class Cat extends Animal{
      	
      }
      

應用:

  • 產生繼承關係後,子類可以使用父類中的方法和屬性,也可以定子類中特有的方法和屬性;

特點:

  • java中為單繼承,也就是一個子類只能有一個父類,但是可以多級繼承,屬性與方法也與之遞增;

好處:

  • 提高程式碼的複用性;
  • 提高程式碼的擴充套件性;

不可繼承

  • 構造方法
    • 類中的構造方法適用於建立本類物件,不能用於建立物件,不可繼承!
  • private修飾的屬性和方法:
    • 方法修飾符的限制,private修飾為本類可見,外界無法訪問 ;
  • 當父子類不在同一個包(package)中時,被default修飾的子類;
    • default修飾符為:僅同包的子類可見;

訪問修飾符的許可權:

avater

方法的重寫

方法重寫的原則:

  • 方法名、引數列表、返回值型別與父類必須相同;
  • 訪問修飾符與父類相同或是不能嚴於父類;

示例:

  • //父類中定義的eat的方法
    public void eat() {
    	System.out.println("吃東西!");
    }
    //子類中重寫了父類中的方法
    public void eat() {
    	System.out.println("喂貓吃魚!");
    }
    

方法重寫的執行:

  • 當父類的方法被子類重寫後,父類的方法會被子類覆蓋,執行時打印出子類的方法的內容;

super關鍵字

概念:

  • 在子類中可以直接方法從父類中繼承到的屬性和方法,但如果父子類的屬性或方法存在重名時,此時需要用到super.屬性或方法區分;
  • 示例:
    • public Pea() {
          //此時呼叫父類中的light屬性:super.屬性使用;
      	super.setSunlight(125);
      }
      

super的訪問方法

  • super關鍵字可以在子類中訪問父類的方法;
  • 示例

    • public Water() {
          //super.父類方法名的方式呼叫父類中的方法;
      	super.setSunlight(320);
      }
      

繼承中物件的建立過程

概念:

  • 在具有繼承關係的物件建立的過程中,當構建子類的物件時,會優先構造父類的物件,也就是父類的構造方法先執行;
  • 由父類的共性內容,疊加子類的獨有內容,組成完整的子類物件

過程:

  • avater

注意:

  • 如果在子類的構造方法中,沒有向顯示super()或super(實參),則預設提供super();
  • 同一個子類的構造方法中,this關鍵字與super關鍵字不可同時存在;

多型

概念:

  • 父類的引用指向子類的物件,從而產生多型;

多型的必要條件:

  • 二者具有直接或間接的繼承關係,父類的引用指向子類的物件;
  • 子類必須複寫父類中的方法;
  • 父類引用僅可呼叫父類所宣告的屬性和方法,不可呼叫子類特有的方法和屬性;

向上轉型(裝箱)

  • 示例:
    • //第一種
      Animal a = null;
      a = new Dog();
      //第二種 父類的引用指向子類的物件;
      Animal a2 = new Dog();
      
  • 注意:
    • 此時僅可呼叫父類的屬性和物件,當有子類的方法複寫父類中的方法,執行的是子類中的物件;

向下轉型(拆箱)

  • 示例
    • Animal a = new Dog();
      //向下轉型,將dog物件型別轉換為Animal型別的資料
      Dog d = (Dog)a;
      
  • 注意:
    • 當向下轉型時容易發生ClassCastException型別轉換異常;
    • 此時需要用到instanceof關鍵字進行型別判斷;

應用場景

  • 使用父類作為方法的形參,實現多型;
  • 使用父類作為返回值,實現多型;

三個修飾符

抽象(abstract)

概念:

  • 具備某種物件的特徵,但不完整;

抽象類

  • 應用:abstract修飾類,此類不能new物件
  • 作用:
    • 可被子類繼承,提供共性屬性與方法;
    • 可宣告為引用,更自然的使用多型;

抽象方法

  • 定義:被abstract修飾的的方法,稱為抽象方法 ,只有方法的宣告,沒有方法的主體({});

靜態(static)

靜態屬性:靜態屬性是整個共享空間共有的屬性。任何一物件被修改都會影響屬性值的改變;

靜態方法:

  • 允許直接訪問靜態成員
  • 不能直接方法非靜態成員
  • 不允許使用this與super關鍵字
  • 可以繼承,不能重寫,沒有多型

final

final修飾的類、方法、變數的特點:

  • 1.final修飾的類:為最終類,該類不能被繼承;
  • 2.final修飾的方法:為最終方法,該方法不能被重寫;
  • 3.final修飾的變數:為常量,該變數不能再被重新賦值,通常static修飾符一起在介面中被使用;

介面

介面與抽象類的區別

抽象類:

​ 1.抽象類不能被例項化(new 物件)、
​ 2.抽象類中可以定義普通方法、構造方法、屬性;
​ 3.子類繼承時必須重寫抽象類中的抽象方法;

介面:

​ 1.介面中不能例項化物件;
​ 2.介面中不能定義構造方法、普通方法、
​ 3.介面中只能定義常量;
​ 4.介面中的方法只能被public所修飾;
​ 5.實現類實現必須複寫介面中的抽象方法;

介面定義的規範:

  • 任何類在實現介面是時,必須實現介面中的所有抽象方法,否則此類為抽象類

  • 實現介面中的方法時,訪問修飾符必須是public

介面的好處:

  • 程式的耦合度降低

  • 更加自然的使用多型

  • 設計與實現完全分離

  • 更加容易的搭建程式的框架

  • 更加容易更換具體的實現