1、交通工具类(vehicle)
成员变量:
类型(vType) String类型 如: 小型车、大型车
载客人数(vNum) int类型 如: 20
构造方法:
构造方法(1),输出“创建了一个交通工具”;
构造方法(2),调用构造方法(1),并通过形参初始化类型(vType)和载客人数(vNum);
普通方法:
设置get和set方法用于获取和设置类中各个变量的值;
重写Equals方法,当且仅当类型(vType)和载客人数(vNum) 均相等时,即为同一交通工具。
重写toString方法,返回类型(vType)和载客人数(vNum)的信息
样式如下:类型:小型车,载客人数:20
2、计费接口(Charge)
成员方法:
billingMethods( ),用于输出不同类型交通工具的不同计费方式,如:
公交车计费方式:
一元/张(不计公里数)
3、公交车类(Bus)
继承vehicle类
实现Charge接口
成员变量:
线路号(bNo) String类型 如:5路、4路
线路(line) String类型 如:科技学院—火车站
构造方法:
先调用父类构造方法(2)初始化类型(vType)和载客人数(vNum),再初始化线路号(bNo)和线路(line)。
普通方法:
重写billingMethods( )方法。
定义showBus()方法,用于输出Bus对象的所有信息(父类和子类)
4、通过main函数测试。
创建两个vehicle对象v1和v2,分别输出v1和v2,并调用其equals方法判断两个对象是否相等;
创建一个Bus对象,调用其showBus()方法和billingMethods( )方法。
1、程序代码:
//*************交通工具类********************
public class Vehicle {
private String vType;
private int vNum;
public Vehicle(){
System.out.println("创建了一个交通工具");
}
public Vehicle(String vType,int vNum) {
this();
this.vType = vType;
this.vNum = vNum;
}
public String getvType() {
return vType;
}
public void setvType(String vType) {
this.vType = vType;
}
public int getvNum() {
return vNum;
}
public void setvNum(int vNum) {
this.vNum = vNum;
}
public boolean equals(Object obj) {
// 判断当前对象和传递的对象,如果是同一个对象直接通过
if (this == obj) {
return true;
}
// 判断传递进来的对象是否是Vehicle类型,不是的话直接pass
if (!(obj instanceof Vehicle)) {
return false;
}
// 将obj向下转型为Vehicle引用,可以访问Vehicle特有内容,否则只能访问共有内容
Vehicle v = (Vehicle) obj;
return this.vType == v.vType && this.vNum == v.vNum;
}
@Override
public String toString() {
return "Vehicle{" +
"类型:'" + vType + '\'' +
",载客人数:" + vNum +
'}';
}
}
//***************Charge接口*****************
interface Charge{
public abstract void billingMethods();
}
//*************公交车类*********************
class Bus extends Vehicle implements Charge{
private String line;
private String bNo;
public String getbNo() {
return bNo;
}
public void setbNo(String bNo) {
this.bNo = bNo;
}
public String getLine() {
return line;
}
public void setLine(String line) {
this.line = line;
}
public Bus(String vType,int vNum,String bNo,String line) {
super(vType,vNum);
this.bNo = bNo;
this.line = line;
}
public void billingMethods(){
System.out.println("一元/张(不计公里数)");
}
public void showBus(){
System.out.println("类型:"+this.getvType());
System.out.println("载客人数"+this.getvNum());
System.out.println("线路号:"+this.bNo);
System.out.println("线路:"+this.line);
}
public static void main(String[] args){//创建两个交通工具对象
Vehicle v1=new Vehicle("火车",1209);
Vehicle v2=new Vehicle("客机",235);
System.out.println(v1.toString());
System.out.println(v2.toString());
System.out.println("两个对象是否相等:"+v1.equals(v2));//创建一个公交车类
Bus bus=new Bus("公交车",34,"K5","8848");
bus. showBus();
bus.billingMethods();
}
}
测试结果:

2、程序解析:
(1)用到的知识点:
a、类的创建(成员变量与成员方法的创建,构造方法,方法的重写)
b、类的继承(extends)
c、接口的创建与实现(implements)
d、方法的重写(equals()方法和toString()方法)
(2)程序解析:
a、交通工具类:
创建该类的目的是被后面的Bus类所继承。
equals方法是对两个对象的内存地址的比较,无实际意义。因此,需要子类重写equals方法。用于比较两个对象的值是否相等
toString方法如果不重写的话返回对象的内存地址,没有实际意义,因此需要进行重写返回对象的信息。
public class Vehicle {
//成员变量用private修饰,不允许外界(Vehicle类外)直接访问,但是此类内部可直接访问,保证了安全性
private String vType;
private int vNum;
//定义构造方法(一种特殊的方法):
//方法名与类名相同
//无返回值,但是不能加void。
public Vehicle(){
System.out.println("创建了一个交通工具");
}
public Vehicle(String vType,int vNum) {
//调用本类的构造方法用this关键字
this();//调用本类无参的构造方法
this.vType = vType;
this.vNum = vNum;
}
public String getvType() {
return vType;
}//创建getvType方法目的是提供给外界获取本类的成员变量的值的路径,因为成员变量为Private,但是此方法为Public
public void setvType(String vType) {
this.vType = vType;
}//创建setvType方法目的是提供给外界修改本类的成员变量的值的路径,因为成员变量为Private,但是此方法为Public
public int getvNum() {
return vNum;
}
public void setvNum(int vNum) {
this.vNum = vNum;
}
public boolean equals(Object obj) {
// 判断当前对象和传递的对象,如果是同一个对象直接通过
if (this == obj) {
return true;
}
// 判断传递进来的对象是否是Vehicle类型,不是的话直接pass
if (!(obj instanceof Vehicle)) {
return false;
}
// 将obj向下转型为Vehicle引用,可以访问Vehicle特有内容,否则只能访问共有内容
Vehicle v = (Vehicle) obj;
//将比较的结果返回
return this.vType == v.vType && this.vNum == v.vNum;
}
@Override
//返回此对象的信息
public String toString() {
return "Vehicle{" +
"类型:'" + vType + '\'' +
",载客人数:" + vNum +
'}';
}
}
b、创建计费接口:
接口:接口是比抽象类更为抽象的类,interface关键字提供了一个完全抽象的类,包含了类要实现的方法。一个接口的实现类必须实现接口所描述的所有方法,否则就必须声明为抽象类。
接口的特点:
成员变量:必须是静态的,且必须要赋初值,改制不能再被修改。默认修饰符为:public static final
成员方法:为抽象的,public abstarct 可以省略,接口中不能有一般方法。
interface Charge{
public abstract void billingMethods();
}
c、公交车类:
class Bus extends Vehicle implements Charge{
private String line;
private String bNo;
public String getbNo() {
return bNo;
}
public void setbNo(String bNo) {
this.bNo = bNo;
}
public String getLine() {
return line;
}
public void setLine(String line) {
this.line = line;
}
public Bus(String vType,int vNum,String bNo,String line) {
//子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句 super(参数列表) 调用父类的构造方法
super(vType,vNum);
this.bNo = bNo;
this.line = line;
}
//实现接口中的方法
public void billingMethods(){
System.out.println("一元/张(不计公里数)");
}
public void showBus(){
System.out.println("类型:"+this.getvType());//Bus类在交通工具类外,需要用getvType()获取值
System.out.println("载客人数"+this.getvNum());
System.out.println("线路号:"+this.bNo);
System.out.println("线路:"+this.line);
}
public static void main(String[] args){
Vehicle v1=new Vehicle("火车",1209);
Vehicle v2=new Vehicle("客机",235);
System.out.println(v1.toString());
System.out.println(v2.toString());
System.out.println("两个对象是否相等:"+v1.equals(v2));
Bus bus=new Bus("公交车",34,"K5","8848");
bus.showBus();
bus.billingMethods();
}
}
来源:https://www.cnblogs.com/zhai1997/p/12019565.html