Java继承练习

一、选择

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后,以下结果描述正确的是 B
在这里插入图片描述

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("黄色");

	}

}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页