继承 5-2编程

继承 5-2编程

public class Car {
	//属性:车的颜色color、车主姓名userName
	private String color;
	private String userName;
	
	public Car(){
			
	}
	//带参构造函数(参数为color和useName)
	public Car(String userName,String color){
		this.setColor(color);
		this.setUserName(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)
	public boolean equals(Object obj) {
		if(obj==null)
			return false;
		Car temp=(Car)obj;
		if(this.getColor().equals(temp.getColor())&&this.getUserName().equals(temp.getUserName()))
			return true;
		else
			return false;
	}
	// 重载
		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;
		}
		
}

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

	

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

	//创建无参无返回值的display方法,表现为:**拥有的**颜色的私家车,有**座位
	public void display() {
		System.out.println(super.getUserName()+"拥有的"+super.getColor()+"颜色的私家车,有"+this.getNum()+"座位");
	}	
	//重载display方法(带参数num),描述为:家用汽车大多有**个座位
	public void displa() {
//		this.setNum(5);
		System.out.println("家用汽车大多有"+this.getNum()+"个座位");
	}
	

}

public class Test {

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

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

		//通过重写equals方法,比较两个对象是否相等
	boolean f= ca1.equals(ca2);
	System.out.println(f);
	
		System.out.println("==================================");
        //实例化子类Taxi对象,并传入属性值
		Taxi ta=new Taxi("张小泉","蓝色","长生公司");
		
		//调用ride和use方法
		ta.ride();
		ta.use();
		
		//输出重写toString后的taxi信息
		System.out.println(ta.toString());
		
		System.out.println("==================================");
		//实例化子类HomeCar对象,并传入属性值
		HomeCar ho1= new HomeCar("张二娘","紫色",7);
		HomeCar ho2= new HomeCar(5);

		//调用display方法及它的重载方法
		ho1.display();
		ho2.displa();	

老师,我想用带参构造方法来给HomeNum的display的重载方法赋值,为什么结果是0?

正在回答

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

3回答

        同学你好,在调用无参的构造方法,diaplay方法可以将传入的参数,直接输出,例如:

调用无参的构造方法, HomeCar ho2= new HomeCar();

在diaplay有参数的方法中,直接将传入的参数输出

http://img1.sycdn.imooc.com//climg/5d0ef7f30001bc3606860130.jpg

得到的输出结果:

http://img1.sycdn.imooc.com//climg/5d0ef86b0001cbab06200292.jpg

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕小班 2019-06-23 10:10:23

        同学你好,1、方法中有参数,与调用无参构造是没有关系的哦!

        2、 //调用无参构造方法,所有成员属性赋给默认值!此时的num属性为默认值0

        HomeCar ho2= new HomeCar();    //num为0

// 调用display方法,方法中直接获取num的值,此时num为0,所有输出的就是0

         ho2.display(5);   //如果不写setNum=5,获取的值就是初始值 在display方法中可以直接获取传入的参数进行输出,输出的就是传入的参数哟!

http://img1.sycdn.imooc.com//climg/5d0ede97000178af06320111.jpg

http://img1.sycdn.imooc.com//climg/5d0edeba0001c15806780394.jpg

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 慕移动ttong #1
    方法这样写的: public void display(int num) { System.out.println("家用汽车大多有"+this.getNum()+"个座位"); } 然后,调用是这样写的: //实例化子类HomeCar对象,并传入属性值 HomeCar ho1= new HomeCar("张二娘","紫色",7); HomeCar ho2= new HomeCar(); //调用display方法及它的重载方法 ho1.display(); ho2.display(5); 老师,你是说直接调用无参构造,在方法中直接赋值为5,调用方法对吗? 可是这样写,结果是0个
    2019-06-23 10:53:46
提问者 慕移动ttong 2019-06-22 22:35:23

1、是不是方法里有参数,所以要调用无参构造方法?

2、实际上,方法我是这样写的:

public void display(int num) {

this.setNum(5);

System.out.println("家用汽车大多有"+this.getNum()+"个座位");

}

然后,调用是这样写的:

//实例化子类HomeCar对象,并传入属性值

HomeCar ho1= new HomeCar("张二娘","紫色",7);

HomeCar ho2= new HomeCar();


//调用display方法及它的重载方法

ho1.display();

ho2.display(5);

运行结果是对的,但我总觉得哪里不对,既然我在ho2.display(5);赋了值,为什么还要写this.setNum(5);(没办法,是我试出来的,不写this.setNum(5);结果也是0)。。。。


到底哪里不对?正确的又应该怎么写?

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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