封裝和繼承作業


封裝和繼承作業

 

 

一、    選擇題

 

1.

使用權限修飾符( B   )修飾的類的成員變量和成員方法,可以被當前包中所有類訪問,也可以被它的子類(同一個包以及不同包中的子類)訪問。(選擇一項)

 

 

 

 

A

public

 

B.

protected

 

C.

默認

 

D.

private

 

2.

給出如下代碼,如何使成員變量m被方法fun()直接訪問(  C  )。(選擇一項)

 

class Test {

         private int m;

         public static void fun() {

         }

}

 

 

 

 

A

將private int m 改為protected int m

 

B.

將private int m 改為public int m

 

C.

將private int m 改為static int m

 

D.

將private int m 改為int m

 

3.

以下關於繼承條件下構造方法執行過程的代碼的執行結果是(  A  。(選擇一項)

 

class Person {       

         public Person() {

                  System.out.println("execute Person()");

         }

}

class Student extends Person { 

         public Student() {        

                  System.out.println("execute Student() ");

         }      

}

class PostGraduate extends Student {      

         public PostGraduate() {      

                  System.out.println("execute PostGraduate()");

         }      

}

public class TestInherit {

         public static void main(String[] args) {

                  new PostGraduate();            

         }

}

 

 

 

 

A.

execute Person()

execute Student()

execute PostGraduate()

 

B.

execute PostGraduate()

 

C.

execute PostGraduate()

execute Student()

execute Person()

 

D.

沒有結果輸出

 

4.

以下關於thissuper關鍵字的說法錯誤的是(    BD。(選擇二項)

 

 

 

 

A.

this關鍵字指向當前對象自身,super關鍵字指向當前對象的直接父類

 

B.

在main方法中可以存在this或super關鍵字,但不能同時存在。

 

C.

this和super關鍵字都可以訪問成員屬性,成員方法和構造方法

 

D.

在一個類的構造方法中可以同時使用this和super來調用其他構造方法

 

5.

給出下面的代碼段,在代碼說明//assignment x=a,y=b處寫入如下( D   )個代碼是正確的。(選擇一項)

 

public class Base {

         int w, x, y, z;

         public Base(int a, int b) {

                  x = a;

                  y = b;

         }

         public Base(int a, int b, int c, int d) {

                  // assignment x=a,y=b

                  w = d;

                  z = c;

         }

}

 

 

 

 

A

Base(a,b);

 

B.

x=a,y=b;

 

C.

this(a),this(b);

 

D.

this(a,b)

 

6.

以下Java程序編譯運行后的輸出結果是()。(選擇一項)

 

class HelloA {

         public HelloA( ) {

                  System.out.println("HelloA");

         }

         {   System.out.println("I'm A class");

         }

 

         static {

                  System.out.println("static A");

         }

}

public class HelloB extends HelloA {

         public HelloB( ) {

                  System.out.println("HelloB");

         }

         {   System.out.println("I'm B class");

         }

         static {

                  System.out.println("static B");

         }

         public static void main(String[] args) {

                  new HelloB( );

         }

}

 

 

 

 

A

static A

static B

I'm A class

HelloA

I'm B class

HelloB

C.

static A

I'm A class

HelloA

static B

I'm B class

HelloB

 

B.

static A

static B

I'm A class

I'm B class

HelloA

HelloB

D

static A

static B

HelloA

HelloB

I'm A class

I'm B class

 

7.

下列選項中關於Javasuper關鍵字的說法正確的是(   AD  )。(選擇二項)

 

 

 

 

A

super關鍵字是在子類對象內部指代其父類對象的引用

 

B.

super關鍵字不僅可以指代子類的直接父類,還可以指代父類的父類

 

C.

子類通過super關鍵字只能調用父類的方法,而不能調用父類的屬性

 

D.

子類通過super關鍵字可以調用父類的構造方法

 

二、    判斷題

  1. 使用public修飾的成員屬性和方法可以被當前項目中所有包的所有類訪問。( T  )
  2. 類的方法通常設為public,而類的實例變量一般也設為public。(F    )
  3. 與未加訪問控制符的缺省情況相比,public和protected修飾符擴大了類及其屬性和方法的被訪問范圍,private修飾符則縮小了這種范圍。( T )
  4. 訪問權限是private的變量,只能在本類和與本類同一個包中的其他類使用。(   F )
  5. 如果定義一個類時沒有使用extends,則它的父類是java.lang.Object。( T   )
  6. 對子類實例化對象需要調用超類的構造函數進行初始化工作,完成對子類中的超類實例變量的初始化,則子類可以繼承超類的構造函數。(F )
  7. 在Java中任何一個子類的構造方法都必須調用其父類的構造方法(包括隱式調用),並且調用父類的構造方法的語句必須是子類構造方法的第一條語句。(   F)
  8. Java中的類不允許多重繼承,一個類只能有有一個直接父類。(T)
  9. Object類有一個public方法是toString( ),一個對象通過調用該方法可以獲得該對象的字符串表示。(  T  )
  10. 運算符“==”用於比較引用時,如果兩個引用指向內存同一個對象,則返回true。(  T  )

 

三、    簡答題

  1. private、默認、protected、public四個權限修飾符的作用.

    訪問修飾符:可以修飾變量,方法,類

              修飾變量:四種修飾符都能使用

              修飾方法:四種修飾符都能使用

              修飾類:2種  public,default

 

 

  1. 方法重載和方法重寫(覆蓋)的區別。.

  (1)方法重載:存在一個類中

                       方法名必須相同

                       參數列表不同(參數個數,類型,順序不同)

                       與返回值無關

         (2)方法重寫:存在子父類中,子類把父類的方法重寫一遍

                        返回值,方法名,參數列表必須一致

                        子類的訪問修飾符要大於等於父類的訪問修飾符 

  1. java.lang.Object類的六個常用方法的聲明並說明其作用。

    Object類有一個默認構造方法pubilcObject(),在構造子類實例時,都會先調用這個默認構造方法。    

    equals()方法:用於測試某個對象是否同另一個對象相等。它在Object類中的實現是判斷兩個對象是否指向同一塊內存區域。

    toString():返回該對象的字符串表示。Object類中的toString()方法會打印出類名和對象的內存位置。幾乎每個類都會覆蓋該方法,以便打印對該對象當前狀態的表示。

f    inalize

    protected void finalize()

                     throws Throwable

    當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。子類重寫 finalize 方法,以配置系統資源或執行其他清除。

    wait

    public final void wait()

                throws InterruptedException

    導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法。換句話說,此方法的行為就好像它僅執行 wait(0) 調用一樣。

    notify

    public final void notify()

    喚醒在此對象監視器上等待的單個線程。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,並在對實現做出決定時發生。線程通過調用其中一個 wait 方法,在對象的監視器上等待。

 

  1. 繼承條件下子類構造方法的執行過程

        1、子類的構造過程中必須調用其基類的構造方法。

    2、子類可以在自己的構造方法中使用super(argument_list)調用基類的構造方法

         2.1、使用this(argument_list)調用本類的另外構造方法。

         2.2、如果調用super,必須寫在子類構造方法的第一行。

    3、如果子類的構造方法中沒有顯示的調用基類的構造方法,則系統默認調用基類的無參數構造方法。

    4、如果子類構造方法中既沒有顯示調用基類構造方法,而基類又沒有無參數的構造方法,則編譯出錯。

  1. super關鍵字的作用和使用

      super子類可以通過它調用父類的方法      寫在構造方法的第一行

 

  1. ==和equals()的聯系和區別

    1.基本數據類型

    也稱原始數據類型。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==),比較的是他們的值。 

    2.復合數據類型(類) 

      當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結果為true,否則比較后結果為false。 JAVA當中所有的類都是繼承於Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的內存地 址,但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在堆內存中的存放地址了。

      對於復合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基於他們在內存中的存放位置的地址值的,因為Object的equals方法也是用雙等號(==)進行比較的,所以比較后的結果跟雙等號(==)的結果相同。

 

四、    編碼題

  1. 以面向對象的思想,編寫自定義類描述IT從業者。設定屬性包括:姓名,年齡,技術方向,工作年限, 工作單位和職務;方法包括:工作

要求:

    1)        設置屬性的私有訪問權限,通過公有的get,set方法實現對屬性的訪問

    2)        限定IT從業人員必須年滿15歲,無效信息需提示,並設置默認年齡為15。

    3)        限定“技術方向”是只讀屬性

    4)        工作方法通過輸入參數,接收工作單位和職務,輸出個人工作信息

    5)        編寫測試類,測試IT從業者類的對象及相關方法(測試數據信息自定義)

  1 public class IT {
  2     private String name;
  3     private int age;
  4     private String tend;
  5     private int workAge;
  6     private String workPlace;
  7     private String job;
  8 
  9     // 無參構造器
 10     public IT() {
 11         super();
 12         // TODO Auto-generated constructor stub
 13     }
 14 
 15     // 有參構造器
 16     public IT(String name, int age, String tend, int workAge, String workPlace, String job) {
 17         super();
 18         this.name = name;
 19         this.age = age;
 20         this.tend = tend;
 21         this.workAge = workAge;
 22         this.workPlace = workPlace;
 23         this.job = job;
 24     }
 25 
 26     // get,set方法
 27     public String getName() {
 28         return name;
 29     }
 30 
 31     public void setName(String name) {
 32         this.name = name;
 33     }
 34 
 35     public int getAge() {
 36         return age;
 37     }
 38 
 39     public void setAge(int age) {
 40         if (age <= 15) {
 41             this.age = 15;
 42             System.out.println("年齡無效,默認值是15");
 43         } else {
 44             this.age = age;
 45         }
 46     }
 47 
 48     public String getTend() {
 49         return tend;
 50     }
 51 
 52     public void setTend(String tend) {
 53         this.tend = tend;
 54     }
 55 
 56     public int getWorkAge() {
 57         return workAge;
 58     }
 59 
 60     public void setWorkAge(int workAge) {
 61         this.workAge = workAge;
 62     }
 63 
 64     public String getWorkPlace() {
 65         return workPlace;
 66     }
 67 
 68     public void setWorkPlace(String workPlace) {
 69         this.workPlace = workPlace;
 70     }
 71 
 72     public String getJob() {
 73         return job;
 74     }
 75 
 76     public void setJob(String job) {
 77         this.job = job;
 78     }
 79 
 80     // 工作方法
 81     public void work() {
 82         System.out.println("姓名:" +name);
 83         System.out.println("年齡:" + age);
 84         System.out.println("技術方向: " + tend);
 85         System.out.println("工作年限: " + workAge);
 86         System.out.println("工作單位: " + workPlace);
 87         System.out.println("職務: " + job);
 88     }
 89 
 90 }
 91 public class test {
 92     public static void main(String[] args) {
 93         IT t = new IT("馬未龍", 35, "數據庫維護", 10, "騰訊實業", "數據庫維護工程師");
 94         t.work();
 95         System.out.println("--------------------");
 96         IT t1 = new IT();
 97         t1.setName("張凱");
 98         t1.setAge(6);
 99         t1.setTend("Java開發");
100         t1.setWorkAge(1);
101         t1.setWorkPlace("鼎盛科技");
102         t1.setJob("Java開發工程師");
103         t1.work();
104     }
105 }

  2.編寫應用程序,創建類的對象,分別設置圓的半徑、圓柱體的高,計算並分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。(7分)

  提示:(1)編寫一個圓類Circle,該類擁有:

  1)       一個成員變量,radius(私有,浮點型);//存放圓的半徑;

  2)       兩個構造方法

  Circle()              //將半徑設為0

  Circle(double  r )    //創建Circle對象時將半徑初始化為r

  3)       三個成員方法

  double getArea()      //獲取圓的面積

  double getPerimeter()  //獲取圓的周長

  void show()           //將圓的關徑、周長、面積輸出到屏幕

                  (2) 編寫一個圓柱體類Cylinder,它繼承於上面的Circle類。還擁有:

  1)       一個成員變量,double hight  (私有,浮點型);  //圓柱體的高;

  2)       構造方法

  //創建Cylinder對象時將半徑初始化為r,高度初始化為h

  Cylinder(double r,double h)    

  3)       成員方法

  double getVolume()            //獲取圓柱體的體積

  void showVolume()             //將圓柱體的體積輸出到屏幕

 1 public class Circle {
 2     double radius;
 3 
 4     // 無參構造器
 5     public Circle() {
 6        this.radius=0;
 7     }
 8 
 9     // 有參構造器
10     public Circle(double r) {
11         this.radius = r;
12     }
13     
14     //獲取圓的面積
15     public double getArea(){
16         double s = Math.PI*this.radius*this.radius;
17         return s;
18     }
19     
20     //獲取圓的周長
21     public double getPerimeter(){
22         double c = 2*Math.PI*this.radius;
23         return c;
24     }
25     
26   //將圓的半徑、周長、面積輸出到屏幕
27     public void show(){
28       System.out.println("圓的半徑是:"+this.radius);
29       System.out.print("圓的周長是:");
30       System.out.printf("%.2f",getPerimeter());
31       System.out.print("\n圓的面積是:");
32       System.out.printf("%.2f",getArea());
33     }
34 }
35 public class Cylinder extends Circle {
36     double hight;// 圓柱體的高
37 
38     public Cylinder(double r, double h) {
39         super(r);
40         this.hight = h;
41     }
42 
43     // 獲取圓柱體的體積
44     public double getVolume() {
45         double s = super.getArea();
46         double v =s*this.hight;
47         return v;
48     }
49     
50     //將圓柱體的體積輸出到屏幕
51     public void showVolume(){
52         System.out.print("\n圓柱的體積是:");
53         System.out.printf("%.2f",getVolume());
54     }
55 }
56 public class test {
57     public static void main(String[] args) {
58         Cylinder c = new Cylinder(3, 6);
59         Circle ci = new Circle(5);
60         ci.show();
61         c.showVolume();
62     }
63 }

  3.某公司要開發新游戲,請用面向對象的思想,設計游戲中的蛇怪和蜈蚣精

  設定

  1)       蛇怪類:

  屬性包括:怪物名字,生命值,攻擊力

  方法包括:攻擊,移動(曲線移動),補血(當生命值<10時,可以補加20生命值)

  2)       蜈蚣精類:

  屬性包括:怪物名字,生命值,攻擊力

  方法包括:攻擊,移動(飛行移動)

  要求

  1)       分析蛇怪和蜈蚣精的公共成員,提取出父類—怪物類

  2)       利用繼承機制,實現蛇怪類和蜈蚣精類

  3)       攻擊方法,描述攻擊狀態。內容包括怪物名字,生命值,攻擊力

  4)       編寫測試類,分別測試蛇怪和蜈蚣精的對象及相關方法

  5)       定義名為mon的包存怪物類,蛇怪類,蜈蚣精類和測試類

 1 public class Monster {
 2     String name;
 3     int healthpoint;// 生命值
 4     int Attack;// 攻擊力
 5 
 6     public String getName() {
 7         return name;
 8     }
 9 
10     public int getHealthpoint() {
11         return healthpoint;
12     }
13 
14     public int getAttack() {
15         return Attack;
16     }
17 
18     public void setName(String name) {
19         this.name = name;
20     }
21 
22     public void setHealthpoint(int healthpoint) {
23         this.healthpoint = healthpoint;
24     }
25 
26     public void setAttack(int attack) {
27         this.Attack = attack;
28     }
29     
30     //攻擊
31     public void attack(){
32         System.out.println("怪物"+getName()+"展開攻擊");
33         System.out.println("當前的生命值是:"+getHealthpoint());
34         System.out.println("攻擊力是:"+getAttack());
35     }
36      //移動
37     public void move(){}
38     
39 
40 }
41 public class Snake extends Monster {
42     //補血(當生命值<10時,可以補加20生命值)
43     public void addHP(){
44         if(getHealthpoint()<10){//當生命值<10時,可以補加20生命值
45             healthpoint = getHealthpoint()+20;
46             System.out.println("施展大蛇補血術。。。。。當前的生命值是:"+healthpoint);
47         }
48         
49     }
50     
51     //方法重寫-重寫父類move();
52     public void move(){
53         System.out.println("我是蛇怪,我走S行線路!");
54     }
55     
56     
57 }
58 public class Centipede extends Monster {
59     // 方法重寫-重寫父類move();
60     public void move() {
61         System.out.println("我是蜈蚣精,我御風飛行!");
62     }
63 }
64 public class test {
65     public static void main(String[] args) 
66         // 創建蛇對象
67         Snake s = new Snake();
68         s.setName("金蛇怪");
69         s.setHealthpoint(1);
70         s.addHP();
71         s.setAttack(100);
72         s.attack();
73         s.move();
74         // 創建蜈蚣對象
75         System.out.println();
76         Centipede ce = new Centipede();
77         ce.setName("紫衣蜈蚣");
78         ce.setHealthpoint(30);
79         ce.setAttack(70);
80         ce.attack();
81         ce.move();
82     }
83 }

五、    可選題

 

  1. 以面向對象的思想,編寫自定義類描述圖書信息。設定屬性包括:書名,作者,出版社名,價格;方法包括:信息介紹

  要求:

  1)       設置屬性的私有訪問權限,通過公有的get,set方法實現對屬性的訪問

  2)       限定介格必須大於10,如果無效進行提示

  3)       設計構造方法實現對屬性賦值

  4)       信息介紹方法描述圖書所有信息

  5)       編寫測試類,測試圖書類的對象及相關方法(測試數據信息自定)

ublic class BookInformation {
    private String name;
    private String author;
    private String publish;
    private double price;

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public String getPublish() {
        return publish;
    }

    public double getPrice() {
        return price;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setPublish(String publish) {
        this.publish = publish;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    //書信息介紹
    public void introduce() {
      System.out.println("書名:"+getName());
      System.out.println("作者:"+getAuthor());
      System.out.println("出版社:"+getPublish());
      System.out.println("價格:"+getPrice()+"元");
    }
    public static void main(String[] args) {
        BookInformation b1 = new BookInformation();
        b1.setName("鹿鼎記");
        b1.setAuthor("金庸");
        b1.setPublish("人民出版社");
        b1.setPrice(120);
        b1.introduce();
        System.out.println("======================");
        BookInformation b2 = new BookInformation();
        b2.setName("絕代雙驕");
        b2.setAuthor("古龍");
        b2.setPublish("中國長安出版社");
        b2.setPrice(55);
        b2.introduce();
    }

}

  2.請用面向對象的思想,設計自定義類描述演員和運動員的信息

  設定

  1)       演員類:

  屬性包括:姓名,年齡,性別,畢業院校,代表作

  方法包括:自我介紹

  2)       運動員類:

  屬性包括:姓名,年齡,性別,運動項目,歷史最好成績

  方法包括:自我介始

  要求

  3)       分析演員和運動員的公共成員,提取出父類—人類

  4)       利用繼承機制,實現演員類和運動員類

  5)       編寫測試類,分別測試人類,演員類和運動員類對象及相關方法

  6)       定義名為act的包存人類,演員類,運動員類和測試類

  1 public class People {
  2     private String name;
  3     private int age;
  4     private String sex;
  5 
  6     public String getName() {
  7         return name;
  8     }
  9 
 10     public int getAge() {
 11         return age;
 12     }
 13 
 14     public String getSex() {
 15         return sex;
 16     }
 17 
 18     public void setName(String name) {
 19         this.name = name;
 20     }
 21 
 22     public void setAge(int age) {
 23         this.age = age;
 24     }
 25 
 26     public void setSex(String sex) {
 27         this.sex = sex;
 28     }
 29     
 30     //公共方法-自我介紹
 31     public void introduce(){
 32         System.out.println("大家好!我是:"+getName());
 33         System.out.println("今年"+getAge() +"歲");
 34         System.out.println("我是一個"+getSex()+"生");
 35     }
 36 }
 37 
 38 public class Sportsman extends People {
 39     private String project;
 40     private String grade;
 41 
 42     public String getProject() {
 43         return project;
 44     }
 45 
 46     public String getGrade() {
 47         return grade;
 48     }
 49 
 50     public void setProject(String project) {
 51         this.project = project;
 52     }
 53 
 54     public void setGrade(String grade) {
 55         this.grade = grade;
 56     }
 57     
 58     public void title(){
 59         System.out.println("我是一個普通的小老百姓");
 60         System.out.println("=====================");
 61     }
 62     //運動員介紹-運動項目,歷史最好成績
 63     public void infor(){
 64         System.out.println("我最擅長的運動項目是:"+getProject()+"短跑");
 65         System.out.println("歷史最好的成績是:"+getGrade());
 66     }
 67 
 68 }
 69 public class Actor extends People{
 70     private String graduate;
 71     private String representative;
 72 
 73     public String getGraduate() {
 74         return graduate;
 75     }
 76 
 77     public String getRepresentative() {
 78         return representative;
 79     }
 80 
 81     public void setGraduate(String graduate) {
 82         this.graduate = graduate;
 83     }
 84 
 85     public void setRepresentative(String representative) {
 86         this.representative = representative;
 87     }
 88     
 89     //演員介紹-畢業院校,代表作
 90     public void info() {
 91         System.out.println("畢業院校:"+getGraduate());
 92         System.out.println("代表作:"+getRepresentative());
 93     }
 94     
 95     public void title1(){
 96         System.out.println("=====================");
 97     }
 98 }
 99 
100 public class test {
101     public static void main(String[] args) {
102         //運動員對象
103         Sportsman s = new Sportsman();
104         s.setName("劉小翔");
105         s.setAge(23);
106         s.setSex("男");
107         s.setProject("200");
108         s.setGrade("22秒30");
109         s.title();
110         s.introduce();
111         s.infor();
112         
113         //演員對象
114         Actor a = new Actor();
115         a.setName("章衣");
116         a.setAge(27);
117         a.setSex("女");
118         a.setGraduate("北京電影學院");
119         a.setRepresentative("《寄往天國的家書》");
120         a.title1();
121         a.introduce();
122         a.info();
123     }
124    
125   
126 }

 


免責聲明!

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



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