Java继承下5_2代码,请老师检查。

来源:5-2 编程练习

不爽船长

2020-04-26 17:57:59

package pers.arkham.test;

import pers.arkham.info.Car;
import pers.arkham.info.HomeCar;
import pers.arkham.info.Taxi;

public class Test {
    public static void main(String[] args){ 
		//实例化父类对象,并传入两组相同的属性值
    	Car car1 = new Car("蓝色", "张小泉");
    	Car car2 = new Car("蓝色", "张小泉");

		//调用父类use方法
    	car1.use();

		//通过重写equals方法,比较两个对象是否相等
		System.out.println("car1和car2的引用比较:"+ car1.equals(car2));

		System.out.println("==================================");
        //实例化子类Taxi对象,并传入属性值
		Taxi taxi = new Taxi("长生公司", "蓝色", "张小泉");

		//调用ride和use方法
		taxi.ride();
		taxi.use();

		//输出重写toString后的taxi信息
		System.out.println(taxi.toString());

		System.out.println("==================================");
		//实例化子类HomeCar对象,并传入属性值
		HomeCar homeCar = new HomeCar("紫色", "孙二娘", 7);

		//调用display方法及它的重载方法
		homeCar.display();
		homeCar.display(5);


	}
}
package pers.arkham.info;

public class Car {
    //属性:车的颜色color、车主姓名userName
	public String color;//车的颜色
	public String userName;//车主姓名

	public Car(){
		
	}
	//带参构造函数(参数为color和useName)
	public Car(String color,String userName) {
		this.color = color;
		this.userName = userName;
	}

    //通过封装实现对私有属性的get/set操作
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
    //创建无参无返回值得方法use(描述内容为:我是机动车!)
	public void use() {
		System.out.println("我是机动车!");
	}

	//重写equals方法,比较两个对象是否相等(比较color,userName)
	@Override
	public boolean equals(Object obj) {
		if(obj == null) {
			return false;
		}
		Car car = (Car)obj;
		if( this.getColor().equals(car.getColor()) 
		 && this.getUserName().equals(car.getUserName()) ) {
			return true;
		}else {
			return false;
		}
	}
}
package pers.arkham.info;

public class Taxi extends Car{
    //私有属性:所属公司( company)
	private String company;//所属公司

	public Taxi(){
		
	}
	//调用父类的构造方法,完成属性赋值
    public Taxi(String company,String color,String userName) {
    	super(color, userName);//父类构造
    	//setCompany(company);
    	this.setCompany(company);//this 可以和 super一起用吗
    }
	
    //通过封装实现对私有属性的get/set操作
	public void setCompany(String company) {
		this.company  = company;
	}
	public String getCompany() {
		return company;
	}
	//创建不允许重写的ride方法,描述为:**出租车是所属于***公司的。
	public final void ride() {
		System.out.println(this.getUserName()+"的出租车是所属于"+this.getCompany()+"公司的");
	}
	//重写父类use方法,描述为:出租车是提高市民生活质量的重要条件之一
	@Override
	public void use() {
		System.out.println("出租车是提高市民生活质量的重要条件之一");
	}
	//重写toString方法,输出的表现形式不同(输出color,userName)
	@Override
	public String toString() {
		return "taxi的信息是:"+ this.getUserName()+"拥有一辆"+this.getColor()+"出租车";
	}
}
package pers.arkham.info;

public final class HomeCar extends Car{
    //私有属性:载客数(num)
	private int num;//载客数
    
	public HomeCar(){
		
	}
	//带参构造方法为所有属性赋值
	public HomeCar(String color, String userName, int num) {
		this.setColor(color);
		this.setUserName(userName);
		setNum(num);
	}

	//通过封装实现对私有属性的get/set操作
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}

	//创建无参无返回值的display方法,表现为:**拥有的**颜色的私家车,有**座位
	public void display() {
		System.out.println(this.getUserName()+"拥有的"+this.getColor()+"颜色的私家车,有"+this.getNum()+"座位");
	}

	//重载display方法(带参数num),描述为:家用汽车大多有**个座位
	public void display(int num) {
		System.out.println("家用汽车大多有"+this.getNum()+"个座位");
	}

}

老师想问个问题,我记得前几节课说到super和this不能一起用,但是我在  taxi类中用了super调用父类构造,也使用了this 并没有报错,请指教。

写回答

1回答

苍星乱舞

2020-04-26

不是super和this这两个关键字不能同时,而是通过super和this调用的构造方法不能同时使用,即

super()和this()不能同时使用

请采纳!

0

0 学习 · 11489 问题

查看课程