java實驗2 類的繼承性

來源:互聯網
上載者:User

標籤:

實驗2 類的繼承性
一、實驗目的
掌握物件導向的繼承性在Java中的實現方法;掌握super關鍵字的用法,體會抽象類別和抽象方法的作用。
二、實驗內容
1.程式理解:
1)類的繼承

2)第4章課後編程第1題

class Student {    public String name;    public int age;    public Student(String name,int age){        this.name=name;        this.age=age;    }    public void show(){        System.out.println("name: "+name+" age: "+age);    }}class UnderGraduate extends Student{    public String degree;    public UnderGraduate(String name,int age,String degree){        super(name, age);        this.degree=degree;    }    public void show(){        System.out.println("name: "+name+" age: "+age+" degree: "+degree);    }}public class Test01{    public static void main(String[] args) {        Student student = new Student("zhangsan", 16);        student.show();        UnderGraduate underGraduate = new UnderGraduate("lisi", 20, "bechalor");        underGraduate.show();    }

2.編程題:
(1)請按照以下要求設計類。( 程式1)
要求如下:
1)設計Animal類。類中定義一個成員變數animalName,表示動物的名稱,變數animalName是String類型,預設初始值。在該類中再定義一個成員方法shout(),表示動物發出叫聲的行為,該方法能輸出名稱為animalName的動物發出叫聲,例如輸出“波斯貓發出叫聲”。
2)設計Cat類。使用關鍵字extends繼承Animal類。Cat類中定義一個public類型的構造方法,該構造方法擁有一個String類型的參數catName,通過該參數,為Cat類中繼承自Animal類的animalName成員變數賦值。
3)設計一個測試類別。類名為ExtendsTest,在main方法中定義一個 String類型的name變數,並為它賦值為”波斯貓”,然後使用有參構造建立Cat類的對象,並使用對象的引用變數調用shout()方法。

(2)設計父類和一個子類,在子類裡面通過super關鍵字去調用父類的成員變數和成員方法,在子類的構造方法中使用super關鍵字調用父類的構造方法,在測試類別裡進行驗證。(程式2)

(3)建立平面圖形抽象類別(PlaneGraphic)及其子類三角形(Triangle), 圓(Circle),長方形(Rectangle)的一個繼承分級結構。在抽象類別PlaneGraphic中,提供計算圖形周長和面積的抽象方法,並在各子類中實現抽象方法,從而根據不同類型的平面圖形計算相應的周長和面積。提示:三角形面積計算用海倫公式:,p為三角形的半周長。(程式3)

(4)請按照以下要求設計一個Outer類。(程式4)
要求如下:
1)定義一個外部類Outer,並在該類中定義一個靜態內部類Inner。
2)在內部類中定義一個靜態變數staticField和一個靜態方法staticMethod(),並將該變數的值設定為”靜態內部類的靜態變數”,該方法中輸出”靜態內部類的靜態方法”。
3)定義一個測試類別,在main()方法中輸出staticField的值,並且調用靜態方法staticMethod()。

(5)熟悉Eclipse開發工具。
請自己學習課本第11章,熟悉使用Eclipse進行程式調試(418頁),瞭解jar檔案的匯入和匯出(422頁)。

三、實驗結果和分析
說明:請給出各個程式的運行結果,並做必要的分析。
(1)程式1運行結果

分析:Cat類通過extends關鍵字繼承了Animal類,這樣Cat類便是Animal類的子類。從運行結果不難看出,子類雖然沒有定義animalName屬性和shout()方法,但是卻能訪問這兩個成員,這就說明,子類在繼承父類的時候,會自動擁有父類的所有成員,Cat類定義了有參建構函式,在測試類別的main方法中使用有參構造建立Cat類對象,運行結果

(2)程式2運行結果

分析:定義了一個Child類繼承Father類,並重寫了Father類的eat()方法,在子類Child的eat()方法中使用”super.eat()”調用了父類被重寫的方法,在introFather()方法中使用“super.age”訪問父類的成員變數。從運行結果可以看出,子類通過super關鍵字成功地訪問父類的成員變數和成員方法。在執行個體化Child對象時一定會調用Child類的構造方法,從運行結果可以看出,Child類的構造方法被調用時,父類的構造方法也被調用了。

(3)程式3運行結果

分析:從運行結果可以看出,子類實現了父類的抽象對象後,可以正常進行執行個體化,並通過執行個體化對象調用方法。抽象類別其實是約束子類的方法命名,在抽象父類中定義抽象方法,在子類中實現,不同的參數通過成員變數實現。

(4)程式4運行結果

分析:內部類Inner使用static關鍵字來修飾,是一個靜態內部類,執行個體化方式與非靜態成員內部類的執行個體化方式不一樣,在靜態內部類中科院定義靜態成員,而在非靜態內部類中不允許定義靜態成員。

四、實驗原始碼
說明:請將各程式的原始碼複製粘貼到這裡。
(1)程式1原始碼

//定義Animal類class Animal{    String animalName;    //定義動物叫的方法    void shout(){        System.out.println(animalName+"發出叫聲");    }}//定義Cat類繼承Animal類class Cat extends Animal{    //類中定義一個public類型的構造方法    public Cat(String catName){        animalName=catName;    }}//定義測試類別public class ExtendsTest {    public static void main(String[] args) {        String name="波斯貓";      //定義一個  String類型的name變數,並為它賦值為”波斯貓”,        Cat cat=new Cat(name);  //使用有參構造建立Cat類的對象        cat.shout();            //使用對象的引用變數調用shout()方法。    }}

(2)程式2原始碼

//定義Father類class Father{    int age=30;    String food="小熊餅乾";    //定義Father類有參建構函式    public Father(String name){        System.out.println("我的名字叫"+name);    }    //定義喜歡吃的方法    void eat(){        System.out.println("我喜歡吃"+food);    }}//定義Child類class Child extends Father{    //在子類的構造方法中使用super關鍵字調用父類的構造方法,    public Child(){        super("蠟筆小新");    }    //在子類裡面通過super關鍵字去調用父類的成員方法,    void eat(){        super.eat();    }    //在子類裡面通過super關鍵字去調用父類的成員變數    void introFather(){        System.out.println("我爸爸今年"+age+"歲了");    }}//定義測試類別public class Example2 {    public static void main(String[] args) {        Child child=new Child();        //建立一個Child類的執行個體對象        child.eat();                    //調用Child類的eat方法                            child.introFather();            //調用Child類的introFather方法    }}

(3)程式3原始碼

import java.util.Scanner;//定義抽象類別PlaneGraphicabstract class PlaneGraphic{    double area;    //定義抽象方法getArea    abstract void getArea();}//定義Triangle類繼承抽象類別PlaneGraphicclass Triangle extends PlaneGraphic{    double a,b,c;    //定義Triangle類有參建構函式    public Triangle(double a,double b,double c){        this.a=a;        this.b=b;        this.c=c;    }    //實現抽象方法getArea()    void getArea(){        double p=(a+b+c)/2;        double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));        System.out.println("該三角形的面積是:"+area);    }}//定義Circle類繼承抽象類別PlaneGraphicclass Circle extends PlaneGraphic{    double r;    //定義Circle類有參建構函式    public Circle(double r){        this.r=r;    }    //實現抽象方法getArea()    void getArea(){        double area=Math.PI*r*r;        System.out.println("該圓的面積是:"+area);    }}//定義Rectangle類繼承抽象類別PlaneGraphicclass Rectangle extends PlaneGraphic{    double x,y;    //定義Rectangle類有參建構函式    public Rectangle(double x,double y){        this.x=x;        this.y=y;    }    //實現抽象方法getArea()    void getArea(){        double area=x*y;        System.out.println("該矩形的面積是:"+area);    }}//定義測試類別public class Example3 {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        System.out.println("請輸入三角形的邊長:");        double a1=sc.nextDouble();        double b1=sc.nextDouble();        double c1=sc.nextDouble();        Triangle t=new Triangle(a1,b1,c1);//執行個體化Triangle對象        t.getArea();        System.out.println("請輸入圓的半徑:");        double r1=sc.nextDouble();        Circle c=new Circle(r1);                 //執行個體化Circle對象        c.getArea();        System.out.println("請輸入矩形的邊長:");        double x1=sc.nextDouble();        double y1=sc.nextDouble();        Rectangle re=new Rectangle(x1,y1);  //執行個體化Rectangle對象        re.getArea();    }}

(4)程式4原始碼

//定義一個外部類class Outer{    //下面的代碼定義了一個靜態內部類    static class Inner{        static String staticField="靜態內部類的靜態變數";        static void staticMethod(){            System.out.println("靜態內部類的靜態方法");        }    }}//定義測試類別public class Example4 {    public static void main(String[] args) {            Outer.Inner inner=new Outer.Inner();//建立內部類對象            System.out.println(inner.staticField);            inner.staticMethod();    }}

java實驗2 類的繼承性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.