疯狂java讲义第五章课后习题第5题答案

5.定义交通工具、汽车、火车、飞机这些类,注意它们的继承关系,为这些类提供超过3个不同的构造器,并通过实例初始化块提取构造器中的通用代码。

疑问:实例初始化块能够提取的,通用代码,不都是可以放在构造器之外的吗?为什么还需要提取出来呢?
我懂了,在构造器内是可以执行比如 System.out.println(),这样的方法的,而在构造器外是不行的,除非是放在实例初始化块中或者类初始化块中,

Vehicle.java 交通工具抽象类

package vehicle;
/**
* 一个交通工具抽象类,因为没有一种叫做交通工具的交通工具,
* 所以不能创造叫做交通工具的实例
* @author 程序代号
* @version 1.0
*/
public abstract class Vehicle
{
	private String name;//名称
	private String speed;//每小时的行驶速度
	
	//提供默认构造器
	public Vehicle()
	{
		System.out.println("Vehicle的无参数构造器");
	}
	
	public Vehicle(String name)
	{
		this.name = name;
		System.out.println("Vehicle的name参数构造器");
	}
	public Vehicle(String name , String speed)
	{
		this(name);
		this.speed = speed;
		System.out.println("Vehicle的全部参数构造器");	
	}
	

	/**
	* 交通工具启动的方法
	*/
	public void start()
	{
		System.out.println(name+"启动了");
	}
	/**
	* 交通工具停止的方法
	*/
	public void stop()
	{
		System.out.println(name+"停下了");
	}

	
	/**
	* name的set方法
	* @param name 交通工具的名称
	*/
	public void setName(String name)
	{
		this.name = name;
	}
	/**
	* name的get方法
	* @return name 返回交通工具的名称
	*/
	public String getName()
	{
		return name;
	}
	/**
	* speed的set方法
	* @param speed 交通工具的速度
	*/
	public void setSpeed(String speed)
	{
		this.speed = speed;
	}
	/**
	* speed的get方法
	* @return speed 交通工具的速度
	*/
	public String getSpeed()
	{
		return speed;
	}
}
	

Car.java

package vehicle;

public class Car extends Vehicle
{
	
	private int wheelnum;//轮子的数量,两个轮子的是摩托车,四个轮子的是汽车
	
	//提供构造器
	public Car()//默认构造器
	{
		System.out.println("汽车造好了");
	}
	public Car(String name )
	{
		super(name);
		System.out.println("汽车造好了");
	}
	public Car(String name,String speed)
	{
		super(name, speed);
		System.out.println("汽车造好了");
		
	}
	public Car(String name ,String speed,int wheelnum)
	{
		super(name,speed);
		this.wheelnum = wheelnum;
		System.out.println("汽车造好了");
	}
	public Car(int a)
	{
		System.out.println("特立独行的构造器"+a);
	}
	
	/**
	* 汽车转弯的方法
	*/
	public void turn()
	{
		System.out.println(getName()+"转弯了");
	}
	/**
	* 汽车加速的方法
	*/
	public void accelerate()
	{
		System.out.println(getName()+"汽车加速了");
	}
	/**
	* 汽车人变身方法
	*/
	public void trans()
	{
		System.out.println(getName()+"变身了,变成了"+getName()+"人");
	}

	
	/**
	* wheelnum的set方法
	* @param wheelnum 轮胎的数目
	*/
	public void setWheelNum(int wheelnum)
	{
		this.wheelnum = wheelnum;
	}
	/**
	* wheelnum的get方法
	* @return wheelnum 轮子的数量
	*/
	public int getWheelNum()
	{
		return wheelnum;
	}
}

Train.java

package vehicle;

public class Train extends Vehicle
{
	private int number ; //有几节车厢
	
	//如果说不用实例初始化块   会报错
	{
		System.out.println("火车造好了");
	}

	//构造器
	public Train()//默认构造器
	{
		
	}
	public Train(String name)
	{
		super(name);
		
	}
	public Train(String name,String speed)
	{
		super(name,speed);
		
	}
	public Train(String name ,String speed, int number)
	{
		super(name, speed);
		this.number = number;
		
	}

	/**
	* 火车呜呜呜的方法
	*/
	public void wuwuwu()
	{
		System.out.println(getName()+"呜呜呜");
	}
	/**
	* 火车喷烟的方法
	*/
	public void fake()
	{
		System.out.println(getName()+"喷出了黑色的烟雾");
	}
	
	/**
	* number的set方法
	* @param number 几节车厢
	*/
	public void setNumber(int number)
	{
		this.number = number;
	}
	/**
	* number 的get方法
	* @return  number 返回车厢的数量
	*/
	public int getNumber()
	{
		return number;
	}

}

AirCraft.java

package vehicle;

/**
* 飞机类,可能速度稍微会快一点
* @author 程序代号
* @version 1.0
*/
public class AirCraft extends Vehicle
{
	//成员变量
	private String type; // 类型 民用还是军用
	//实例初始化块
	{
		System.out.println("飞机造好了");
	}
	//构造器
	public AirCraft(){}//默认构造器
	public AirCraft(String name)
	{
		super(name);
	}
	public AirCraft(String name ,String speed)
	{
		super(name, speed);
	}
	public AirCraft(String name, String speed, String type )
	{
		super(name, speed);
		this.type = type;
	}

	/**
	* 飞机起飞的方法
	*/
	public void fly()
	{
		System.out.println(getName()+"起飞了");
	}
	/**
	* 飞机降落的方法
	*/
	public void landing()
	{
		System.out.println(getName()+"降落了");
	}

	
	/**
	* type的set方法
	* @param type 飞机的类型
	*/
	public void setType(String type)
	{
		this.type = type;
	}
	/**
	* type的get方法
	* @return type 返回飞机的类型
	*/
	public String getType()
	{
		return type;
	}
	
}
	

程序入口
Main.java

package vehicle;

/**
* 程序入口
* @author 程序代号
* @version 1.0
*/
public class Main
{
	public static void main(String[] args)
	{
		//尝试一下命令行传入的方法
		for(int i =0 ; i < args.length; i++)
		{
			System.out.println("参数"+(i+1)+"是"+args[i]);
		}

		//创建一个汽车人
		Car car = new Car("五菱宏光","250");
		car.start();
		car.turn();
		car.accelerate();
		car.trans();
		car.stop();

		//创建一个火车人
		Train train = new Train("复兴号","3000");
		train.start();
		train.wuwuwu();
		train.fake();
		train.stop();
	
		//创建一个飞机人
		AirCraft ac = new AirCraft("无尽号","50000","军用");
		ac.start();
		ac.fly();
		ac.landing();
		ac.stop();

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值