天天看點

Java 02繼承

java繼承

繼承java面向對象三大特性之一,在程式中将多個類中的擁有相同的屬性和方法進行提取,放入一個父類中,通過extends關鍵字實作對父類的繼承使用父類中的屬性和方法,達到最大限度的代碼重用。

Class father{
  public String name;
  protected String sex;
  private int age;
  
  public void print(){//代碼塊}
   //........提取出共有的屬性和方法
   //public修飾符是最大通路權限
   //private修飾符隻能在本類中使用
   //protected修飾符定義同一個包下或是繼承本類的子類可以使用
}

class son extends father{
  private String color;
  
  public void info(){}
  //定義son類繼承father類  
  //子類擁有父類的非private修飾的屬性和方法使用this或super調用
  //子類除了擁有父類的屬性和方法也可以定義自身特有的屬性和方法

}
           

繼承的特性

定義父類的子類繼承者時,在子類的構造方法中會預設 出現super()調用父類的無參構造方法(隐式),即使沒有顯示的調用,系統也會預設調用。

class father{
  String name;
  int age;
  public father(Strning name){
  	this.name=name;
  }
}

class son extends father{
  string sex;
  public son(String name,String sex){
  	super(name); //自動生成調用父類無參構造方法或添加參數調用父類有參構造
  	this.sex=sex;
  }
}
           

抽象類和抽象方法

java 中使用abstract關鍵字定義一個抽象類或者抽象方法,abstract不可以修飾屬性和構造方法。

抽象類的特性,抽象類不能被執行個體化,抽象方法不能有方法體,抽象類中可以有一個或多個抽象和非抽象方法,也可以有構造函數。

當一個類繼承抽象類後,抽象類的抽象方法在繼承類中必須有實作(重寫)。
//定義一個抽象類
public abstract class father{
	public abstract void show();//抽象方法不能大括号是一個閉合的沒有方法體的方法
	public void info(){
	//方法體
	}
}
//定義一個子類繼承抽象類
public class son extends father{
	//重寫繼承自抽象類father的抽象方法
	public override void show(){
	//實作父類抽象方法的方法體
	}
}
           

final修飾符

在java中final修飾符可以修飾變量,方法,類,不能修飾構造方法。

final修飾的變量(包括成員變量和局部變量)将變成常量,隻能指派一次

final修飾的方法在繼承的子類中不能被重寫

final修飾的類不能再被繼承

若final修飾一個引用型變量對象,修改對象屬性是否發生錯誤?

final Dog dog=new Dog("歐歐");
 dog.name="美美";
 dog=new Dog("壓壓");
 //運作結果為第三行錯誤,final修飾對象不能再指向另一個對象,與修改對象的屬性值無關,是以第二行正确。
           

final 修飾對象儲存的實際為對象的位址,即指向的對象發生變化,那麼位址就會發生變化是以報錯,與對象内儲存的屬 性無關是以屬性值可變。