java中繼承的特點


java中繼承的特點
  繼承是java中很重要的一個應用.那么,為什么要有繼承呢?我們可以看一個實例:貓類和狗類.貓和狗是生活中常見的動物,它們有哪些共性呢?都有顏色(黑白黃花等),都有腿,都要吃飯,都要睡覺等.那么,顏色和腿的數量就是它們的屬性(成員變量),吃飯和睡覺是它們的行為(功能).如果沒有繼承,分別寫貓類和狗類,如下:

public class Cat{           //貓類
    String color ;//  成員變量"顏色"
    int num;  //   成員變量"腿的個數"

    class Cat (){}   //無參構造
    class Cat(String color,int num) { //有參構造
        this.color = color;
        this.num = num;
    }

    public void setColor(String color) { //set方法
        this.color = color;
    }
    public String getColor() { //get方法
        return color;
    }
    public void setNum(int num) {
        this.num= num;
    }
    public int getNum() {
        return num;
    }
}

 

狗類和貓類除了類名不一樣,其他的都一樣,寫起來很浪費時間,也浪費內存.因此,用繼承可以提高代碼的復用性.這和java的跨平台道理差不多,都是為了節約和方便.
  那么,在java中,具體怎么繼承呢?就是讓類於類之間產生關系,產生父子類關系.也就是說兩個類之間一個屬於另一個,就可以繼承.就像貓和狗,毛不屬於狗,狗不屬於貓,它們倆沒法繼承.但是貓屬於動物,狗也屬於動物.動物和貓之間就可以建立繼承關系.同樣,動物與狗之間也可以建立繼承關系.這樣,動物類的一般屬性和行為,貓和狗類就繼承了.
  java的繼承中,也有一些自己的特點.第一:這種繼承是單繼承的關系,不支持多繼承.單繼承就是說一個爹可以有多個兒子,但是一個兒子只能有一個爹.多繼承就是說一個徒弟可以有很多師父(孫悟空就有兩個師父,一個是菩提老祖,一個是唐僧.孫悟空繼承了菩提老祖的部分武藝,又跟着唐僧學做人,最后才成佛).兩種繼承各有各的特點,單繼承呈現樹狀結構,比較安全.多繼承呈現網狀結構,隨意性比較大,不太安全.Java就是選擇了單繼承.同時,這種繼承關系是可以延續下去的,就像爺-父-子-孫這種情況,java中也是這樣,叫多層繼承.
  第二:父類私有的成員不能繼承,父類的構造方法不能繼承,別的都可以繼承.為什么私有的不能繼承呢?因為我們要充分尊重別人的隱私,哪怕這個人是你的父親或兒子或妻子.父類讓你繼承,你才可以繼承,父類隱藏起來的,不想讓你繼承的,你就不能繼承.當然,也不能搶.另外,父類的構造方法也不能繼承,因為構造方法有兩個作用.一是對本類成員的初始化,構造方法名和本類名相同,如果繼承的話,和子類名都不一樣,容易搞混.二是內含super()默認訪問父類的無參構造方法.所以,子類和父類各有各的構造方法,但是子類又靠自己的構造方法默認訪問父類的構造方法,相當於家譜中的血緣關系,是一條無形的紐帶.自然界的萬物都是有歸屬有繼承的,java中同樣如此,每個類都有繼承的父類,如果沒有,就是默認繼承Object類.
  除此之外,子類不僅要繼承父類,還要有所發展,所謂青出於藍而勝於藍.具體到java中的繼承,體現為方法的重寫,也就是在子類中建立一個方法,和父類方法名一樣,但又有自己獨特的內容,這樣一方面通過繼承可以沿襲父類的功能,同時又有自己的新功能.那么在方法重寫中又有那些要求呢?第一:父類的私有方法不能被重寫,因為根本就沒有繼承,也就沒有重寫的基礎.第二:重寫的方法,訪問權限不能更低.好的東西要學會分享,這樣才能壯大.下面我們用貓類和狗類案例結束.

/*
第一步:建立一個父類:動物類
*/
class Animal{           //動物類
    String color ;//  成員變量"顏色"
    int num;  //   成員變量"腿的個數"

    public Animal(){}   //無參構造
    public Animal(String color,int num) { //有參構造
        this.color = color;
        this.num = num;
    }

    public void setColor(String color) { //set方法  設置"顏色"
        this.color = color;
    }
    public String getColor() { //get方法  得到"顏色"
        return color;
    }
    public void setNum(int num) {  //set方法 設置"腿的條數"
        this.num= num;
    }
    public int getNum() {    //get方法 得到"腿的條數"
        return num;
    }
    public void show() {       //展現動物類的屬性
        System.out.println(getColor()+"..."+getNum());
    }
    public void eat () {
        System.out.println("吃飯");
    }
}
/*
第二步:建立兩個子類,分別是貓類和狗類
*/
class Cat extends Animal{
    public Cat (){}   //無參構造
    public Cat(String color,int num) { //有參構造
        this.color = color;
        this.num = num;
    }

    public void catchMouse() {    //貓特有行為:抓老鼠
        System.out.println("抓老鼠");
    }
}
class Dog extends Animal {
    public Dog (){}   //無參構造
    public Dog(String color,int num) { //有參構造
        this.color = color;
        this.num = num;
    }

    public void watchHome() {    //狗特有行為:看家
        System.out.println("看家");
    }
}
/*
第三步:建立測試類進行測試
*/
public class TestAnimal{
    public static void main(String[] args) {
        Cat c1 = new Cat("黃色",4);    //創建對象
        c1.show();       //調用父類
        c1.eat();        //調用父類
        c1.catchMouse();   //調用子類
        System.out.println("++++++++++++++++");
        Dog d1 = new Dog("白色",4);    //創建對象
        d1.show();       //調用父類
        d1.eat();        //調用父類
        d1.watchHome();   //調用子類
    }
}

 


免責聲明!

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



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