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

java高階特性 (繼承)

繼承

  繼承是面向物件的三大特徵之一,也是實現軟體複用的一個手段。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.抽象方法只有能方法宣告,沒有具體的程式碼塊(方法實現),有抽象方法的類必須宣告為抽象類,當一個類繼承了抽象類,那麼它必須重寫父類中所有的抽象方法才能被例項化,否則子類還是一個抽象類。