/*
假设某赛车游戏中,汽车涉及如下内容:车主、品牌、颜色,能够进行启动、前进、后退、停止、熄火等动作,并要求,
若汽车已经启动,就不能重复启动;若汽车处于熄火状态,不能执行除启动外的其它动作。
另外,要能够直接打印出汽车对象的信息。请完成汽车类的设计,其中各项动作给出相关信息提示即可。
*/
class Car{
String owner,color,brand;
boolean isStart = false;
Car (String o, String c, String b){ //构造函数
owner = o; color = c; brand = b;
}
void start(){
if(isStart == true){
System.out.println("Car已启动,不能重复启动!");
return;
}
isStart = true;
System.out.println("Car启动!");
}
void forward(){
if(isStart == false){
System.out.println("Car未启动,不能前进!");
return;
}
System.out.println("Car前进!");
}
void backward(){
if(isStart == false){
System.out.println("Car未启动,不能后退!");
return;
}
System.out.println("Car后退!");
}
void stop(){
if(isStart == false){
System.out.println("Car未启动,不能停止!");
return;
}
isStart = false;
System.out.println("Car停止!");
}
void flameout(){
if(isStart == true){
System.out.println("Car未停止,不能熄火!");
return;
}
System.out.println("Car熄火!");
}
public String toString(){ //必须有public、返回必须是String型、必须无参
return "\n车主:"+owner+"\n颜色:"+color+"\n品牌:"+brand;
}
}
class App{
public static void main(String[] x){
Car c = new Car("小蓝","红色","法拉利");
//Car c1=new Car(); //此句编译错,若类中有定义构造函数,系统将不再提供默认无参构造函数
System.out.println(c);
c.start();
c.forward();
c.backward();
c.flameout();
c.stop();
}
}
//本例掌握:
1、类=数据+操作,例如Car中有数据/属性:颜色、品牌等;有操作start()、forward()等,类中的属性可以在该类的方法中直接使用,如start()可直接使用isStart ;
2、类和对象的关系:类就是对象的设计图纸;对象就是基于图纸产生的实体。类比 Car 类,相当于图纸,图纸不能前进、熄火等,即Car.start()、Car.stop()是错误的。对象是可以执行动作的,如c.forward() 等,因此,必须先创建对象(即new Car(…)),然后才能执行该对象关联的方法;
3、构造函数,特点:与类同名,不能有返回类型,不能用return返回值
另外,若类中【未定义】构造函数,系统将自动补充一个默认的无参构造函数;
若类中【已经定义】构造函数,系统就不在补充任何构造函数;
构造函数的作用:对属性进行初始化
4、public String toString(),特点:必须有public、返回必须是String型、必须无参
这个函数会被System.out.print()在 打印对象时 自动调用;若函数有参,打印对象将会是乱码。