想问下为什么car实例化的时候要传入参数呢

想问下为什么car实例化的时候要传入参数呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    public static void main(String[] args) {
        // 实例化父类对象,并传入两组相同的属性值
        Car car1 = new Car("蓝色","张小泉");
        Car car2 = new Car("蓝色","张小泉");
 
        // 调用父类use方法
        car1.use();
 
        // 通过重写equals方法,比较两个对象是否相等
        boolean flag = car1.equals(car2);
        System.out.println("car1和car2的引用比较:" + flag);
 
        System.out.println("==================================");
        // 实例化子类Taxi对象,并传入属性值
        Taxi taxi = new Taxi("蓝色""张小泉""长生");
 
        // 调用ride和use方法
        System.out.println(taxi.ride());
        taxi.use();
        // 输出重写toString后的taxi信息
        System.out.println("taxi的信息是:" + taxi.toString());
 
        System.out.println("==================================");
        // 实例化子类HomeCar对象,并传入属性值
        HomeCar hc = new HomeCar("紫色","孙二娘",7);
 
        // 调用display方法及它的重载方法
        System.out.println(hc.display());
        System.out.println(hc.display(5));
 
    }
}
package com.imooc.car;

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

	public Car() {

	}

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

	// 通过封装实现对私有属性的get/set操作
	public void setColor(String color) {
		this.color = color;
	}

	public String getColor() {
		return color;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserName() {
		return userName;
	}

	// 创建无参无返回值得方法use(描述内容为:我是机动车!)
	public void use() {
		System.out.println("我是机动车!");
	}

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

public class HomeCar extends Car {
	// 私有属性:载客数(num)
	private int num;

	public HomeCar() {

	}

	// 带参构造方法为所有属性赋值
	public HomeCar(String color, String userName, int num) {
		super(color, userName);
		this.setNum(num);
	}

	// 通过封装实现对私有属性的get/set操作

	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}

	// 创建无参无返回值的display方法,表现为:**拥有的**颜色的私家车,有**座位

	public String display() {
		String str = this.getUserName() + "拥有的" + this.getColor() + "颜色的私家车,有" + this.getNum() + "个座位";
		return str;
	}

	// 重载display方法(带参数num),描述为:家用汽车大多有**个座位
	public String display(int num) {
		String str = "家用汽车大多有" + num + "个座位";
		return str;
	}

}
package com.imooc.car;

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

	public Taxi() {

	}
	// 调用父类的构造方法,完成属性赋值
	public Taxi(String color, String userName, String company) {
		super(color,userName);
		this.setCompany(company);
	}

	// 通过封装实现对私有属性的get/set操作
	public void setCompany(String company) {
		this.company = company;
	}

	public String getCompany() {
		return company;
	}

	// 创建不允许重写的ride方法,描述为:**出租车是所属于***公司的。

	public final String ride() {
		String str = this.getUserName() + "出租车是所属于" + this.getCompany() + "公司的。";
		return str;
	}

	// 重写父类use方法,描述为:出租车是提高市民生活质量的重要条件之一
	public void use() {
		System.out.println("出租车是提高市民生活质量的重要条件之一");
	}

	// 重写toString方法,输出的表现形式不同(输出color,userName)
	public String toString() {
		String str = this.getUserName() + "拥有一辆" + this.getColor() + "的出租车";
		return str;
	}

}

如题,今天报了个空指针,找了半天发现是没有传参,但是传入之后也没有被调用什么的,是不是我写法上有要优化的地方啊?求解

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

因为带参的构造方法就是实例化Car对象的时候用的,便于对象进行初始化。你所传入的参数的值,就是给对象的属性进行赋值。现在你的代码运行结果是正确的。 

  • 好多可乐 提问者 #1
    但是我taxi也传了一次一样的两个参数啊
    2017-08-19 14:40:45
  • 好帮手慕珊 回复 提问者 好多可乐 #2
    Car和Taxi是两个不同的对象,当你调用equas()方法对car1和car2他们的属性值都为null,而equals()方法中,对字符串进行比较时,会用null去调用equals()方法,就会发生空指针异常。
    2017-08-20 10:44:27
  • 好多可乐 提问者 #3
    非常感谢!
    2017-08-20 10:59:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师