1. 程式人生 > >java高級特性 (繼承)

java高級特性 (繼承)

爸爸 類的屬性 父類 urn system nis 理解 xtend 有關

繼承

  繼承是面向對象的三大特征之一,也是實現軟件復用的一個手段。java的繼承具有單繼承的特點(簡單理解一個兒子只能有一個爸爸),每個子類只有一個直接父類,但是一類可以有多個子類(除final類型的類)。

  技術分享圖片

  繼承的特點:

    java的繼承通過extends 關鍵字來實現,實現繼承的類被稱為子類,被繼承的類被成為父類,有的也成為基類、超類。如上圖

/**
* 作為父類的類
* @author GMZ
*
*/
public class ClassParent {
public String name;
public String age;

public ClassParent(){}

//重載的構造方法
public ClassParent(String name){
this.name = name;
}

//重載構造方法
public ClassParent(String name , String age){
this(name);
this.age = age;
}

public void eat(){
System.out.println("parent---------------->eat_method");
}
// 重載 eat方法
protected String eat(String name){
System.out.println("parent---------------->eat_method"+name);
return this.name;
}
}
/**
 * 作為子類的類   用關鍵extends來實現 繼承
 * @author Administrator
 *
 */
public class ClassPosterity extends ClassParent {
    
    //通過super調用父類的構造方法 來為父類的屬性賦值
    public ClassPosterity(String name ,String age){
            super(name,age);
    }
    //@Override代表的是重寫   繼承的子類重寫父類的方法
    @Override
    public void
eat(){ System.out.println("posterity---------------->eat_method"); } }

 這裏面出現了幾個關鍵字和重寫還有方法的重載,我們一個一個來說。

 方法的重寫:

  子類可以根據自己的需求對父類繼承的方法進行重新編寫,成為方法的重寫或者說是方法的覆蓋。重寫有幾個特點

  1. 重寫方法和被重寫方法必須具有相同的方法名。

  2.重寫方法和被重寫方法必須具有相同的參數列表

  3.重寫方法返回值類型必須和被重寫方法的返回值類型相同或是其子類

  4.重寫方法不能縮小被重寫方法的訪問權限。(例如:public不能是private)

  方法的重載:

  同一個類中多個方法名相同,參數列表不同為方法的重載。重載有幾個特點:

  1.方法的重載只在本類中。

  2.方法的重載只與方法名有關與其他無關(返回值類型,參數列表,訪問修飾符)

  super關鍵字

   super代表當前對象的直接父類對象的默認引用。在子類中可以用super關鍵字來訪問父類中的成員。它也有幾個特點

   1.super必須出現在子類(子類的方法和構造方法)中,而不是其他位置

   2.可以訪問父類的成員,如父類的屬性、方法、構造方法。

   3.super無法訪問private修飾的成員。

 抽象類

  在類中還有只用特殊類抽象類。

  

/**
* 抽象類 關鍵子 abstract
* @author GMZ
* 抽象類是不能被實例化的。
*/
public abstract class ClassAbstract {

public String name;
public String age;


public void eat(){
System.out.println("--------------------->eat");
}

//抽象方法,抽象方法沒有方法體 ,當子類(非抽象子類)繼承這個類時必須重寫這個方法,否則無法實例化,除非子類也是抽象類。
//抽象類繼承抽象類是可以不用實現抽象方法的
public abstract void playLOL();
}

  抽象類和抽象方法的特點如下:

  1.抽象類和抽象方法都能通過abstract關鍵字來修飾。

  2.抽象類不能被實例化,抽象類中可以沒有或者有一個或者多個抽象方法,甚至全部方法都是抽象方法。

  3.抽象方法只有能方法聲明,沒有具體的代碼塊(方法實現),有抽象方法的類必須聲明為抽象類,當一個類繼承了抽象類,那麽它必須重寫父類中所有的抽象方法才能被實例化,否則子類還是一個抽象類。

  

java高級特性 (繼承)