目录
抽象类与抽象方法
抽象方法
只有方法的声明,没有任何代码的实现。用abstract修饰符进行声明。它告诉编译器,派生类必须通过重写该方法以提供它们自己的实现。
抽象方法定义格式
方法定义格式
抽象类
含有一个或一个以上的抽象方法的类。
抽象类定义格式
类定义格式
·抽象类中可以包含有一般方法,也可以包含有抽象方法。
·抽象类只能作为基类,它本身不能实例化。
·如果抽象类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象类。即抽象类派生的非抽象类子类,必须实现所有抽象方法。
总结实例
public abstract class ElectricityCharge {
protected int dushu;
public ElectricityCharge(int dushu){
this.dushu=dushu;
}
public abstract double charge();
}
public class ElectricityChargeLackRain extends ElectricityCharge{
public ElectricityChargeLackRain(int dushu){
super(dushu);
}
public double charge(){
if(dushu>150){
return (dushu-150)*3.5*1.1+150*3.5;
}else{
return dushu*3.5;
}
}
}
public class ElectricityChargeOfRain extends ElectricityCharge {
public ElectricityChargeOfRain(int dushu){
super(dushu);
}
public double charge(){
if(dushu>200){
return (dushu-200)*2.25*0.9+200*2.25;
}else{
return dushu*2.25;
}
}
}
public class Test {
public static void main(String[] args) {
ElectricityChargeOfRain e1 = new ElectricityChargeOfRain(300);
System.out.println("丰水期电费为:"+e1.charge());
ElectricityChargeLackRain e2 = new ElectricityChargeLackRain(230);
System.out.println("枯水期电费为:"+e2.charge());
}
}
接口
接口可以实现多继承,类只允许单继承。
接口定义格式
抽象类定义格式
接口与抽象类的区别
接口:
·只包含常量及抽象方法(JDK7之前)
·成员默认为public的
·变量默认都是final的
·抽象方法可以不加abstract,默认abstract
抽象类:
·可以包含有一般成员,也可以包含有抽象方法
·成员可以是私有的、受保护的、内部的或公有的
·可以包含非fina的变量
·抽象方法一定要加abstract
接口与抽象类的相同点
只能被继承,不能实例化。
接口的实现
tips:
·一个类可以实现多个接口,在implements后列出需要实现的接口名。
·如果某个类不是abstract类型,那么类要实现该接口的所有抽象方法。
·在类中实现接口的抽象方法中,必须与接口中定义的方法头完全一致,即方法名、返回值类型及形参列表要完全一致。如果方法名相同,但参数不同,则不是实现接口的抽象方法,而是定义新的方法。
抽象类与接口的选择
·抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
·抽象类多定义对象的属性,而接口多定义对象的行为。
接口新特性
·JDK7以前:接口中只能定义抽象方法
·JDK的新特性:接口中要以定义有方法体的方法。(默认、静态)
·JDK9的特性:接口中可以定义私有方法。
·原因:只要接口中增加新的抽象方法,所有的实现类必须跟着改变,否则实现类会报错。
·解决方法:在接口中增加有方法体的方法,实现类中不需要进行重写实现该接口。
·使用场景:接口升级
JDK8新增的方法
默认方法,使用default修饰
作用:接口升级
tips:
·默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写时去掉default关键字。
·public可以省略,default不能省略。
·如果实现了多个接口,多个接口中存在相同名字的默认方法,实现类必须对该方法进行重写。
静态方法,使用static修饰
tips:
·静态方法只能通过接口名调用,不能通过实现类名或对象名调用。
·public可以省略,static不能省略。
·静态方法不能重写,但实现类中可以写一个同名的静态方法。
JDK9新增的方法
私有方法
·普通私有方法,用于封装默认方法中的重复代码。
·静态私有方法,用于封装静态方法中的重复代码。