Java繼承練習

ZzTiao發表於2020-12-04

一、選擇

1.在Java中,以下程式的輸出結果是 A
在這裡插入圖片描述

A. Super-->print
B. Test-->print
C. Super-->print
   Test-->print
D. 編譯錯誤

2.在Java中,以下關於方法過載和方法重寫描述正確的是 D

A. 方法過載和方法重寫實現的功能相同
B. 方法過載出現在父子關係中,方法重寫是在同一類中
C. 方法過載的返回型別必須一致,引數項必須不同
D. 方法重寫需要出現在滿足繼承關係的子類中

3.哪個選項中的方法插入到(1)處可以正確實現方法重寫 C
在這裡插入圖片描述

A. public static void bark(){}
B. public final void display(){}
C. public void eat(String food){}
D. public boolean eat(String food){}

4.在下面程式的註釋1處補充上下列()方法,會導致在編譯過程中發生錯誤 D

A. public float getNum() { return 4.0f; }
B. private float getNum() {return 4.0f;}
C. public void getNum(double d){}
D. public double getNum(float d){ return 4.0f; }

5.如下Java原始檔,編譯並執行Child.java後,以下結果描述正確的是 D
在這裡插入圖片描述

A. 編譯錯誤:沒有找到構造器Child()
B. 編譯錯誤:沒有找到構造器Parent1()
C. 正確執行,沒有輸出值
D. 正確執行,輸出結果為:parent2

6.分析如下所示的Java程式碼,則選項中的說法正確的是 C
在這裡插入圖片描述

A. 第2行錯誤,Test類的建構函式中引數名稱應與其父類建構函式中的引數名相同
B. 第3行錯誤,應使用super關鍵字呼叫父類的name屬性,改為super.name="hello"
C. 第4行錯誤,呼叫父類構造方法的語句必須放在子類構造方法中的第一行
D. 程式編譯通過,無錯誤 

7.關於super的說法正確的是 C

A. 是指當前子類的物件
B. 是指當前類的物件
C. 是指當前父類的物件
D. 可以用在main()方法中

8.閱讀下面JAVA程式碼片段,正確的選項是 B
在這裡插入圖片描述

A. 第1行編譯錯誤,但能輸出正確結果
B. 第2行編譯錯誤,但能輸出正確結果
C. 第3行編譯錯誤,不能輸出正確結果
D. 第4行編譯錯誤,不能輸出正確結果

9.下列關於super和this的說法正確的是(多選)ABD

A. this關鍵字通常指當前物件
B. super關鍵字則指父類物件
C. 在一個類中this只可以呼叫當前類中公有屬性和方法
D. 在一個類中super可以呼叫父類中允許被訪問的屬性和方法

10.下列關於Object類的敘述錯誤的是 D

A. Object類是所有類的父類
B. 所有類都可以繼承Object中允許被繼承的方法
C. 一個類沒有使用extends關鍵字明確標識繼承關係,則預設繼承Object類
D. 要想繼承Object類,必須使用extends關鍵字標識繼承關係,否則不會實現繼承

11.該段程式碼的執行結果為 D
在這裡插入圖片描述

A. true
B. 相等
C. 不相等
D. false

12.在Java中,關於繼承的說法錯誤的是 C

A. 使用extends關鍵字實現一個類繼承另一個類
B. 所有的Java類都直接或間接地繼承了java.lang.Object類
C. 在子類的構造方法中,必須顯式呼叫父類的構造方法
D. 在子類的構造方法中,可以通過super關鍵字呼叫父類的構造方法

13.下列關於final的說法錯誤的是 C

A. final修飾的變數值不允許被修改
B. final修飾的方法不可被重寫
C. final可以修飾所有方法
D. final不可以修飾構造方法

二、程式設計

程式設計練習:某公司要開發“XX車行管理系統”,請使用物件導向的思想,設計自定義類描述自行車、電動車和三輪車。
程式參考執行效果圖如下:
在這裡插入圖片描述

任務
任務分析;
第一步:分析自行車、電動車和三輪車的共性:
             都是非機動車,具有非機動車的基本特徵
             都有執行的方法
第二步:根據共性,定義非機動車
屬性:品牌、顏色、輪子(預設2個)、座椅(預設 1個)
方法:

  1. 編寫無參構造方法、雙參構造方法和四參構造方法,其中,在雙參構造方法中,完成對品牌和顏色的賦值;在四參構造方法中,完成對所有屬性的賦值
  2. 編寫執行的方法,描述內容為:這是一輛** 顏色的,** 牌的非機動車,有** 個輪子,有** 個座椅的非機動車。其中**的資料由屬性提供

第三步:定義自行車、電動車和三輪車分別繼承自行車類,要求:

自行車類:
              在構造方法中呼叫父類多參構造,完成屬性賦值
重寫執行方法,描述內容為:這是一輛** 顏色的,** 牌的自行車。其中** 的資料由屬性提供
電動車:
             增加“電池品牌”屬性
             重寫執行方法,描述內容為:這是一輛使用** 牌電池的電動車。其中** 的資料由屬性提供
三輪車:
在無參構造中實現對輪子屬性值進行修改
重寫執行方法,描述內容為:三輪車是一款有**個輪子的非機動車。其中 ** 的資料由屬性提供

父類:

package bike;

public class Car {
	private String name;
	private String color;
	private int wheel=2;
	private int seat=1;
	
    public Car(){

    }

	public Car(String name, String color){
		this.name = name;
		this.color = color;
	}
	
	public Car(String name, String color, int wheel, int seat) {
		this.name = name;
		this.color = color;
		this.wheel = wheel;
		this.seat = seat;
	}
	
	public String getName() {
		return name;
	}

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

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public int getWheel() {
		return wheel;
	}

	public void setWheel(int wheel) {
		this.wheel = wheel;
	}

	public int getSeat() {
		return seat;
	}

	public void setSeat(int seat) {
		this.seat = seat;
	}

	public String run() {
    	String str="這是一輛"+getColor()+"顏色的,"+getName()+
    	"牌的非機動車,有"+getWheel()+"個輪子,有"+getSeat()+"個座椅";
    	return str;
    }
	
}

自行車類:

package bike;

public class Bike extends Car{
	public Bike(){
		 super("捷安特","黃");
	}
	
    public String run() {
    	String str="這是一輛"+getColor()+"顏色的,"+getName()+"牌的自行車。";
    	return str;
    }
}

電動車類:

package bike;

public class ElectricCar extends Car{
	private String batteryName;
	
	public ElectricCar(){
		
	}
	
	public ElectricCar(String batteryName) {
		super();
		this.batteryName = batteryName;
	}


	public String getBatteryName() {
		return batteryName;
	}


	public void setBatteryName(String batteryName) {
		this.batteryName = batteryName;
	}


	public String run(){
		String str="這是一輛使用"+getBatteryName()+"牌電池的電動車";
    	return str;
	}
	
}

三輪車類:

package bike;

public class Tricycle extends Car{
	public Tricycle() {
        setWheel(3);
    }
	
	public String run() {
    	String str="三輪車是一款有"+getWheel()+"個輪子的非機動車。";
    	return str;
    }
}

測試類:

package bike;

public class Test {

	public static void main(String[] args) {
		System.out.print("父類資訊測試:");
		Car car=new Car("天宇","紅",4,2);
	    System.out.println(car.run());
	    
	    System.out.print("自行車類資訊測試:");
	    Bike bike=new Bike();
	    System.out.println(bike.run());
	    
	    System.out.print("電動車類資訊測試:");
	    ElectricCar etc=new ElectricCar("飛鴿");
	    System.out.println(etc.run());
	    
	    System.out.print("三輪車類資訊測試:");
	    Tricycle tcycle=new Tricycle();
	    System.out.println(tcycle.run());
	}

}

2.請使用物件導向的思想,設計自定義類Person繼承Object類,重寫toString方法實現物件資訊輸出。
執行效果如下圖所示:
在這裡插入圖片描述

思路分析

建立一個 Person 類繼承自 Object,其中類的結構要求為:
屬性:name(姓名)、age(年齡)、sex(性別)
方法:
建立帶參(name、age、sex為引數)構造方法
重寫 toString 方法,輸出資訊格式為:姓名:** 年齡:** 性別:**(其中,**為物件對應屬性值)
建立測試類,在測試方法中,例項化 Person對 象,並傳入三個屬性值。然後,分別通過直接列印Person物件以及利用重寫的 toString 方法,列印輸出2行物件資訊。

	 public class Person{
	 //私有屬性:name(姓名)、age(年齡)、sex(性別)
	 	private String name;
		private int age;
		private String sex;
	
	
	 //帶參構造方法(name、age、sex為引數)
	 public Person() {

	 }

 	 public Person(String name, int age, String sex) {
 		 this.name = name;
 		 this.age = age;
 		 this.sex = sex;
 	 }
	 
	 //通過封裝實現對屬性的get/set方法設定
		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 getSex() {
			return sex;
		}
	
		public void setSex(String sex) {
			this.sex = sex;
		}		
			
	 //重寫toString方法,表示形式為:姓名:+**+  年齡:+**+  性別:+**
		public String toString() {
			return "姓名:"+ getName()+"   年齡:"+ getAge() +" 性別: "+ getSex();
		}		 
	
	 }
	 
	package test;
	
	public class test {
		public static void main(String[] args) {
		
			Person LiMing=new Person("李明",18,"男");
		    
			System.out.println(LiMing);
			System.out.println(LiMing.toString());
		}
	}

3.請使用物件導向的思想,實現楊梅和仙人蕉的資訊描述。
程式參考執行效果圖如下:
在這裡插入圖片描述

思路分析:
1、根據楊梅和香蕉的共性,抽取父類水果(Fruits)
私有屬性:水果的形狀(shape)和口感(taste)
方法:

帶參建構函式(引數為shape和taste)
建立無參無返回值得方法eat(描述內容為:水果可供人們食用!)
重寫equals方法,比較兩個物件是否相等(比較shape,taste)
2、子類Waxberry
私有屬性:顏色(color)
方法:

呼叫父類的構造方法,完成屬性賦值
建立不允許重寫的face方法,描述為:楊梅:,果味酸甜適中。
重寫父類eat方法,描述為:楊梅酸甜適中,非常好吃!
重寫toString方法,輸出的表現形式不同(輸出shape,color,taste)
要求Waxberry類不允許有子類
3、子類:Banana
私有屬性:品種(variety)
方法:

帶參構造方法為所有屬性賦值
建立無參無返回值的advantage方法,描述為:** 果形**,果肉香甜,可供生食。
過載要求(2)中的advantage方法(帶引數color),描述為:** 顏色為 **
4、測試,執行效果參照效果圖:

例項化2個父類物件,並傳入兩組相同的引數值
呼叫父類eat方法
測試重寫equals方法,判斷兩個物件是否相等
例項化子類Wacberry物件,並傳入相關引數值
呼叫子類face方法和重寫父類eat方法後的eat方法
測試重寫toString方法,輸出子類物件的資訊
例項化Banana類物件,並傳入相關引數值
呼叫子類的advantage和它的過載方法

父類

package fruit;

public class Fruits {
	private String shape;
	private String taste;
	
	public Fruits(){
		
	}

	public Fruits(String shape, String taste) {
		this.shape = shape;
		this.taste = taste;
	}

	public String getShape() {
		return shape;
	}

	public void setShape(String shape) {
		this.shape = shape;
	}

	public String getTaste() {
		return taste;
	}

	public void setTaste(String taste) {
		this.taste = taste;
	}
	
	public String eat(){
		return "水果供人們食用!";
	}
	
	public boolean equals(Object obj) {
    	if(obj==null){
    		return false;
    	}else{
    		Fruits frt=(Fruits)obj;
    		if(this.getShape().equals(frt.getShape())&&this.getTaste().equals(frt.getTaste())){
    			return true;
    		}else{
    			return false;
    		}
            
    	}
        
    }
}

仙蕉類

package fruit;

public class Banana extends Fruits{
		private String variety;

	    public Banana() {
	    
	    }
	    public Banana(String variety) {
	    	this.variety=variety;
	    }

	    public String getVariety() {
	    	return variety;
	    }

	    public void setVariety(String variety) {
	    	this.variety = variety;
	    }
	    
	    public void advantage() {
	    	System.out.println(getVariety()+"果形"+getShape()+",果肉香甜,可供生食。");
	    }
	    
	    public void advantage(String color) {
	    	System.out.println(getVariety()+"顏色為"+color);
	    }

}

楊梅類

package fruit;

public class Waxberry extends Fruits {
	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public Waxberry(String color) {
		this.color = color;
	}

	public final String face() {
		return "楊梅:" + getColor() + "、" + getShape() + ",果味酸甜適中。";

	}

	public String eat() {
		return "楊梅酸甜適中,非常好吃!";
	}
	
	public String toString() {
  	  return "楊梅的資訊:果實為"+getShape()+"、"+getColor()+","+getTaste()+",非常好吃!";
    }
}

測試類

package fruit;

public class Test {

	public static void main(String[] args) {
		Fruits f1=new Fruits("圓形","果肉香甜");
		Fruits f2=new Fruits("圓形","果肉香甜");
		System.out.println(f1.eat());
        boolean flag=f1.equals(f2) ;
        System.out.println("fru1和fru2的引用比較:"+flag);

        System.out.println("================================================");
        Waxberry wab= new Waxberry("紫紅色");
        System.out.println(wab.face());
        System.out.println(wab.eat());
        System.out.println(wab.toString());

        System.out.println("================================================");
        Banana banana=new Banana("仙人蕉");
        banana.setShape("短而稍圓");

        banana.advantage();
        banana.advantage("黃色");

	}

}

相關文章