抽象类的基础概念
用abstract 关键字来修饰一个类时,这个类叫作抽象类。
抽象类无法实例化,抽象类是用来被子类来继承的
抽象类是它的所有子类的公共属性的集合
抽象类里可以定义抽象方法,抽象类的子类必需对抽象方法进行实现
为什么要用抽象类和抽象方法
一些父类中的方法没必要编写,他的各个子类中的方法会有不同的实现
既然没有具体实现,为什么不直接使用空方法?
使用抽象方法,由于抽象方法必须被实现,子类知道他必须要实现该方法,避免忽略某个方法的情况
接口的基础概念
接口自身无法被实例化,只能通过它的实现类来实现。
public class Computer implements Electronic {
public static void main(String[] args)
{
new Computer();
}
@Override
public int getElectricityUse()
{ return 0;
}
}
Electronic e = new Computer();
接口里面的抽象方法会自动加上public abstract修饰符。
接口里面可以有成员变量,默认修饰符是public static final
为什么要使用接口?什么时候使用接口?
当实现的功能模块,可能有多种具体的实现,通过接口抽象化这个功能。当出现新的相似需求时候,再次实现该接口即可。
如果不使用接口而是抽象类会有什么影响?
以汽车为例,定义一个汽车抽象类,有油车和电车两个子类继承了汽车类。这时,如果想要再定义一个油电车混合的类,由于java不能多继承,所以不能同时继承油车和电车,所以代码会冗余。但如果使用接口,由于类可以实现多个接口,所以代码不会冗余。
总结:接口弥补了单继承带来的缺陷。
接口与抽象类区别?
抽象类可以有普通方法实现,而接口的方法中只能是抽象方法
抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型
接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
一个类只能继承一个抽象类,而一个类却可以实现多个接口。