繼承作業
一、 選擇題
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. | 以下關於this和super關鍵字的說法錯誤的是( b,d )。(選擇二項) | |
|
|
|
| A. | this關鍵字指向當前對象自身,super關鍵字指向當前對象的直接父類 |
| B. | 在main方法中可以存在this或super關鍵字,但不能同時存在。 |
| C. | this和super關鍵字都可以訪問成員屬性,成員方法和構造方法 |
| D. | 在一個類的構造方法中可以同時使用this和super來調用其他構造方法 |
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. | 下列選項中關於Java中super關鍵字的說法正確的是( 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()的方法,那麼子類要重寫這個方法時,方法的訪問修飾符可以是默認的,protected或public。( 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米短跑","22秒30");
sm.introduction();
System.out.println("==============");
Performer pf = new Performer("章依",27,"女","北京電影學院",
"《寄往天國的家書》");
pf.introduction();
}
}