抽象类和接口
抽象类
抽象类一般被设计出来作为最基础的类,其中包括对其继承的类的通用属性和方法。同时抽象类只能被继承不能被实例化,在继承类不为抽象类的时候。继承类要重写被继承类里的所有抽象方法。
抽象类里可以有普通方法和抽象方法,但是抽象方法只能在抽象类里。
把类定义成为抽象类需要用到关键字 abstract
语法:
访问修饰符 abstract class 类名{//定义了一个抽象类。
访问修饰符 abstract <数据类型> 方法名();//定义一个抽象方法。
}
注意:抽象方法没有方法体
//这是一个机动车的抽象类
public abstract class MotoV {
private String type;//品牌
private String number;//车牌
private int rent ;//租金
public abstract double disrent(int days) ;
public MotoV(String type, String number, int rent) {
super();
this.type = type;
this.number = number;
this.rent = rent;
}
public MotoV() {
super();
}
public String getType() {
return type;
}
public String getNumber() {
return number;
}
public int getRent() {
return rent;
}
}
//这是有个继承了机动车类的轿车类
public class Car extends MotoV {
private String madel;//型号
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(String type, String number, int rent,String madle) {
super(type, number, rent);
this.madel = madle;
// TODO Auto-generated constructor stub
}
public String getMadel() {
return madel;
}
public void setMadel(String madel) {
this.madel = madel;
}
@Override
public double disrent(int days) {
double dis = 1.0;
if(days>150) {
dis = 0.7;
}else if(days>30) {
dis = 0.8;
}else if(days>7) {
dis = 0.9;
}
return this.getRent()*days*dis;
}
}
这里在继承抽象类的时候要注意的就是必须在子类里把父类的所有抽象方法进行重写,除非子类也是有个抽象类。
接口
众所周知java的类是不支持多重继承的,但是为了提升编程扩展性就提供了接口来解决这个问题。从本质上来说接口其实就是更加抽象的抽象类,在接口里只能有抽象方法和静态常量,当子类实现了接口的时候,就需要将接口里面所有的抽象方法也一并实现。
定义一个接口需要用到关键字:interface
语法:
public interface 接口名 {
//抽象方法
//静态常量
}
这里要注意的是,在接口里面的抽象方法和静态常量的访问修饰符都是public而且也只能是public。
要使类实现接口需要用到关键字:implement。
语法:
public class 类名 implement 接口名,接口名,接口名{//一个类可以实现多个接口
//这里要重写接口里所有的抽象方法。
}
接口的特性:
- 接口不可以被实例化
- 接口中所有方法都是抽象的
- 接口中的字段必须是静态常量
- 接口中所有成员都必须是public的(不写默认的也是public)
- 接口可以多重实现,并且接口也可以多重继承接口。
- 接口没有构造方法。