繼承作業

 繼承作業

一、 選擇題

1.

以下關於繼承條件下構造方法執行過程的代碼的執行結果是(  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.

沒有結果輸出

 

2.

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

 

 

 

 

A.

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

 

B.

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

 

C.

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

 

D.

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


 

3.

給出下面的代碼段,在代碼說明//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);

 

4.

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

 

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

 

5.

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

 

 

 

 

A

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

 

B.

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

 

C.

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

 

D.

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

 

二、 判斷題

1. 如果定義一個類時沒有使用extends,則它的父類是java.lang.Object。(  dui  

2. 對子類實例化對象需要調用超類的構造函數進行初始化工作,完成對子類中的超類實例變量的初始化,則子類可以繼承超類的構造函數。(  cuo  )

3. Java中任何一個子類的構造方法都必須調用其父類的構造方法(包括隱式調用),並且調用父類的構造方法的語句必須是子類構造方法的第一條語句。(  cuo  

4. Java中的類不允許多重繼承,一個類只能有有一個直接父類。dui

5. Object類有一個public方法是toString( ),一個對象通過調用該方法可以獲得該對象的字符串表示。(dui 

6. 父類Person中定義了一個private void show()的方法,那麼子類要重寫這個方法時,方法的訪問修飾符可以是默認的,protectedpublic。(  cuo  

7. 運算符“==”用於比較引用時,如果兩個引用指向內存同一個對象,則返回true。(  dui  )

 

三、 簡答題

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

2. 答:方法的重載是在同一個類內進行的,多個方法名一樣,參數個數或參數類型不同;方法的重寫是在子類繼承父類時子類方法對父類方法進行重寫,重寫時方法名和參數相同,子類方法訪問權大於父類,子類異常大於父類異常,但返回類型比父類方法小或相同。

java.lang.Object類的六個常用方法的聲明並說明其作用。:clone()  創建並返回此對象的一個副本。     equals()  finalize()  hashCode()                 toString(); 用於比較兩個對象是否指向同一塊內存區域,相當於==運算符。(注意:在String類中,已將該方法改寫比較字符串內容是否相同);                hashCode():返回該對象的哈希碼值(整數),用於標識一個對象,如果兩個對象相等,則哈希碼值一定相同;

                         toString():返回值是String類型,描述當前對象的有關信息,當對象與String型數據的連接時,自動調用其toString()方法。

       finalize():當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法

getClass(): 返回此 Object 的運行時類。

 

3. 

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

5. :先調用super來實例父類對象

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

7. 

8. ==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. 編寫應用程序,創建類的對象,分別設置圓的半徑、圓柱體的高,計算並分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。(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()             //將圓柱體的體積輸出到屏幕

 

package cn.lineration;

 

public class Circle {

public float radius;//圓的半徑

Circle(){

this.radius=0;

}

Circle(double r){

this.radius=(float)r;

}

public double getArea(){

return 3.14*(radius*radius);

}

public double getPerimeter(){

return 2*radius;

}

public void show(){

System.out.println("圓的面積是: "+getArea());

System.out.println("圓的周長是: "+getPerimeter());

}

}

package cn.lineration;

 

public class Cylinder extends Circle {

private double hight;//float

Cylinder(double r,double h){

this.radius=(float)r;

this.hight=h;

}

double getVolume(){

return 3.14*this.radius*this.radius*this.hight;

}

void showVolume(){

System.out.println("圓柱體的體積是: "+getVolume());

}

}

package cn.lineration;

 

public class TestCircle {

 

public static void main(String[] args) {

Cylinder c=new Cylinder(4,2);

c.show();

c.showVolume();

}

 

}

 

2. 請使用面向對象的思想,設計自定義類,描述出租車和家用轎車的信息。

設定

1) 出租車類:

屬性包括:車型,車牌,所屬出租公司;方法包括:啓動,停止

2) 家用轎車類:

屬性包括:車型,車牌,車主姓名;方法包括:啓動,停止

要求

1) 分析出租車和家用轎車的公共成員,提取出父類—汽車類

2) 利用繼承機制,實現出租車類和家用轎車類

3) 編寫測試類,分別測試汽車類,出租車類和家用轎車類對象的相關方法

4) 定義名爲car的包存放汽車類,出租車類,家用轎車類和測試類

運行效果

 

 

package cn.car;

 

public class PrivateCar extends Car{

private String owner;

void start(){

System.out.println("我是武大郎,我的車我做主");

}

void stop(){

System.out.println("目的地到了,我們去玩吧");

}

}

 

package cn.car;

 

public class Texi extends Car{

private String company;

void printSuper(){

super.start();

super.stop();

}

void start(){

System.out.println("乘客您好\n我是景順出租車公司的,我的車牌號是京B123,您要去哪裏?");

}

void stop(){

System.out.println("目的地已經到了,請您付費下車,歡迎再次乘車");

}

}

package cn.car;

 

public class Car {

private String type;

private long carNum;

void start(){

System.out.println("我是車,我啓動");

}

void stop(){

System.out.println("我是車,我停止");

}

}

package cn.car;

 

public class TestCar {

 

public static void main(String[] args) {

PrivateCar p=new PrivateCar();

Texi t=new Texi();

t.printSuper();

System.out.println("================================");

p.start();

p.stop();

System.out.println("================================");

t.start();

t.stop();

 

}

 

}

 

 

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

設定

1) 蛇怪類:

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

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

2) 蜈蚣精類:

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

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

要求

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

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

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

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

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

運行效果

 

package mon;

 

public class Basilisk extends Monster{

Basilisk(String name,

double lifeValue,

double aggressivity){

this.name=name;

this.lifeValue=lifeValue;

this.aggressivity=aggressivity;

}

public void move(){

System.out.println("我是"+this.name+",我走S型路線");

}

}

 

package mon;

 

public class CentipedeExtract extends Monster{

CentipedeExtract(String name,double lifeValue,double aggressivity){

this.name=name;

this.lifeValue=lifeValue;

this.aggressivity=aggressivity;

}

public void move(){

System.out.println("我是"+this.name+",御風飛行");

}

}

 

 

package mon;

 

public class TestMonster {

public static void main(String[] args) {

Monster b=new Basilisk("蛇妖甲",24,20);

b.attack();

b.enrichBlood();

b.move();

System.out.println("=========================");

b=new CentipedeExtract("蜈蚣乙",60,15);

b.attack();

b.move();

}

}

package mon;

 

public class Monster {

String name;

double lifeValue;

double aggressivity;

public void attack(){

System.out.println("怪物"+this.name+"展開攻擊\n當前生命值是: "+

this.lifeValue+"\n攻擊力是: "+this.aggressivity);

}

public void enrichBlood(){

if(this.lifeValue<10){

this.lifeValue+=20;

}else{

this.lifeValue++;

}

System.out.println("實施大蛇補血術。。。。。,當前生命值是: "+this.lifeValue);

}

public void move(){}

}

 

五、 可選題

 

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

設定

1) 演員類:

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

方法包括:自我介紹

2) 運動員類:

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

方法包括:自我介始

要求

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

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

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

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

運行效果

 

package act;

 

public class Person {

private String name;

private int age;

private String gender;

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public int getAge() {

return age;

}

 

public void setAge(int age) {

this.age = age;

}

 

public String getGender() {

return gender;

}

 

public void setGender(String gender) {

this.gender = gender;

}

public void introduce(){

System.out.println("我就是一個普通老百姓");

}

}

package act;

 

public class Athlete extends Person{

private String sportEvent;

private String bestScore;

Athlete(String sportEvent,String bestScore){

this.sportEvent=sportEvent;

this.bestScore=bestScore;

}

public void introduce(){

System.out.println("大家好,我是"+this.getName()+"\n今年"+this.getAge()+

"\n我擅長的運動項目是: "+this.sportEvent+"\n歷史最好成績是: "+this.bestScore);

}

}

package act;

 

public class Actor extends Person {

private String graUni;

private String representiveWork;

 

Actor(String graUni,String representiveWork){

this.graUni=graUni;

this.representiveWork=representiveWork;

}

public void introduce(){

System.out.println("大家好,我是"+this.getName()+"\n今年"+this.getAge()+

"\n我畢業於: "+this.graUni+"\n代表作有: "+this.representiveWork);

}

}

 

package act;

 

public class TestAct {

 

public static void main(String[] args) {

Person a=new Person();

a.introduce();

System.out.println("=========================");

Person b=new Athlete("200米短跑","22秒30");

b.setName("劉小祥");

b.setAge(23);

b.introduce();

System.out.println("=========================");

b=new Actor("北京電影學院","<寄往舔過的家書>");

b.setName("章依");

b.setAge(27);

b.introduce();

}

}

 繼承作業答案

 

一、 選擇題


1. A

2. BD

3. D

4. A

5. AD



二、 判斷題


1. √

2. ×

3. ×

4. √

5. √

6. ×

7. √

8. ×


 


三、 簡答題


答案略

 

四、 編碼題


1. 編寫應用程序,創建類的對象,分別設置圓的半徑、圓柱體的高,計算並分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。(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()             //將圓柱體的體積輸出到屏幕

public class Circle {

private double radius;

public Circle(){ //將半徑設爲0

this.radius = 0;

}

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

this.radius = r;

}

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

return Math.PI * this.radius * this.radius ;

}

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

return Math.PI * this.radius * 2 ;

}

/** 將圓的面積 ,周長 */

public void show(){

System.out.println("圓的半徑:"+this.radius);

System.out.println("圓的面積:"+this.getArea());

System.out.println("圓的周長:"+this.getPerimeter());

}

}

 

public class Cylinder extends Circle {

private double hight;

/** 構造時設置圓的高,並調用父類的構造設置半徑 */

public Cylinder(double r,double h){

super(r);

this.hight = h;

}

/** 獲得體積 */

public double getVolume(){

double area = super.getArea();

return area * hight;

}

/**打印半徑,周長,面積,體積*/

public void showVolume(){

super.show();

System.out.println("圓的體積是:"+this.getVolume());

}

}

public class Test {

public static void main(String[] args) {

Cylinder c = new Cylinder(10,10);

c.showVolume();

}

}

 

2. 請使用面向對象的思想,設計自定義類,描述出租車和家用轎車的信息。

設定

1) 出租車類:

屬性包括:車型,車牌,所屬出租公司;方法包括:啓動,停止

2) 家用轎車類:

屬性包括:車型,車牌,車主姓名;方法包括:啓動,停止

要求

1) 分析出租車和家用轎車的公共成員,提取出父類—汽車類

2) 利用繼承機制,實現出租車類和家用轎車類

3) 編寫測試類,分別測試汽車類,出租車類和家用轎車類對象的相關方法

4) 定義名爲car的包存放汽車類,出租車類,家用轎車類和測試類

運行效果

 

 

public class Car {

private String type;

private String carNo;

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getCarNo() {

return carNo;

}

public void setCarNo(String carNo) {

this.carNo = carNo;

}

public void start(){

System.out.println("我是車,我啓動");

}

public void stop() {

System.out.println("我是車,我停止");

}

}

 

public class FamilyCar extends Car {

private String owner;

public FamilyCar(String owner) {

this.owner = owner;

}

public void start() {

System.out.println("我是"+owner+",我的汽車我做主");

}

public void stop() {

System.out.println("目的地到了,我們去玩吧");

}

}

 

public class TaxiCar extends Car {

private String company;

public TaxiCar(String company) {

this.company = company;

}

public void start() {

System.out.println("乘客您好\n我是"+this.company+

"的,我的車牌號是"+this.getCarNo()+",你要去那裏?");

}

public void stop() {

System.out.println("目的地已經到了,請您下車付款,歡迎再次乘坐");

}

}

 

public class Test {

public static void main(String[] args) {

Car c = new Car();

c.start();

c.stop();

System.out.println("===========================");

FamilyCar fc = new FamilyCar("武大郞");

fc.start();

fc.stop();

System.out.println("============================");

TaxiCar tc = new TaxiCar("景順出租公司");

tc.setCarNo("B123");

tc.start();

tc.stop();

}

}

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

設定

1) 蛇怪類:

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

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

2) 蜈蚣精類:

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

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

要求

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

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

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

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

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

運行效果

 

//妖怪類

public class Monster {

private String name;//怪物名

private int hp;//血量

private int aggressivity;//攻擊力

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getHp() {

return hp;

}

public void setHp(int hp) {

this.hp = hp;

}

public int getAggressivity() {

return aggressivity;

}

public void setAggressivity(int aggressivity) {

this.aggressivity = aggressivity;

}

/** 攻擊 */

public void attack() {

System.out.println("怪物"+this.getName()+"展開攻擊");

System.out.println("當前生命值:"+this.getHp());

System.out.println("攻擊力是:"+this.getAggressivity());

}

/** 移動 */

public void move() {

}

}

 

/** 怪蛇類 */

public class Snake extends Monster {

/** 加血 */

public void addHp(){

this.setHp(this.getHp()+20);

System.out.println("實施大蛇補血術......,當前的生命值是"+this.getHp());

}

 

/** 重寫父類的移動方法*/

public void move() {

System.out.println("我是蛇,我走S線路");

}

}

 

/** 蜈蚣類 */

public class Centipede extends Monster {

/** 重寫父類的移動方法*/

public void move() {

System.out.println("我是蜈蚣精,我御風飛行");

}

}

 

public class Test {

public static void main(String[] args) {

Snake sn = new Snake();//生產一個蛇精

sn.setName("怪蛇甲");

sn.setHp(5);

sn.setAggressivity(20);

sn.attack();//調用攻擊方法

if(sn.getHp()<10){//當生命少於10時,加20

sn.addHp();

}

sn.move();//蛇移動

System.out.println("======================");

Centipede ct = new Centipede();//new一個蜈蚣

ct.setName("蜈蚣精乙");

ct.setHp(60);

ct.setAggressivity(15);

ct.attack();//蜈蚣攻擊

ct.move();

}

}

 

五、 可選題

 

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

設定

1) 演員類:

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

方法包括:自我介紹

2) 運動員類:

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

方法包括:自我介始

要求

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

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

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

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

運行效果

 

 

public class Person {

//姓名,年齡,性別

String name;

int age;

String sex;

public Person(){}

public Person(String name, int age, String sex) {

this.name = name;

this.age = age;

this.sex = sex;

}

//介紹

public void introduction(){

System.out.println("大家好,我是一個老百姓");

}

}

 

public class Sportsman extends Person{//運動員類

private String item;

private String bestResult;

public Sportsman(){}

public Sportsman(String name,int age,String sex,String item,String best) {

super(name,age,sex);

this.item = item;

this.bestResult = best;

}

public void introduction() {

System.out.println("大家好,我是"+this.name);

System.out.println("今年"+this.age);

System.out.println("我擅長的項目是:"+this.item);

System.out.println("歷史最好成績是:"+this.bestResult);

}

}

 

public class Performer extends Person {//演員類

private String school;//學校

private String production;//作品

public Performer(){}

public Performer(String name,int age,String sex,String school,String pro) {

super(name,age,sex);

this.school = school;

this.production = pro;

}

public void introduction() {

System.out.println("大家好,我是"+this.name);

System.out.println("今年"+this.age);

System.out.println("我畢業於:"+this.school);

System.out.println("代表作有:"+this.production);

}

}

 

public class Test {

public static void main(String[] args) {

Person p = new Person();

p.introduction();

System.out.println("==============");

Sportsman sm = new Sportsman("劉小翔",23,"",

"200米短跑","2230");

sm.introduction();

System.out.println("==============");

Performer pf = new Performer("章依",27,"","北京電影學院",

"《寄往天國的家書》");

pf.introduction();

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章