一、抽象类的特点
抽象类的特点有:
1 抽象类中不一定有抽象方法
2 只要有抽象方法的类,必须是抽象类
3 抽象方法和抽象类使用 abstract 修饰
4 没有抽象方法的抽象类有意义,防止外界创建对象
防止外界实例的方式:1) 构造方法私有
2) 抽象类
3) 接口
4) 内部类
5 抽象类不能够实例化,得利用多态
6 抽象类的子类特点:1) 如果子类想要继承抽象类,就必须实现抽象类中的所有的抽象方法 2) 如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类
7 抽象类的子类特点:抽象类中:
成员变量:给子类使用
成员方法:给子类使用
构造方法:帮助子类初始化父类继承下来的成员
静态方法:直接通过类名访问,防止创建对象的不建议访问方式
常量:可以,方便访问
抽象类和普通类没有区别,只不过抽象类多了抽象方法
抽象类的抽象方法强制子类重写
非抽象方法直接给子类使用
构造方法和成员变量直接给子类使用
8 抽象类是服务类,成员一般使用public或者protected
9 private修饰的方法不能被子类继承,更不能被重写,abstract修饰的方法强制子类重写
final修饰的方法不能被子类继承,二者冲突
二、接口的特点
1、接口可以用来多实现;
2、接口是程序的功能扩展;
3、接口的出现降低耦合度;
4、接口是对外暴露的规则;
5、接口与接口直接可以有继承关系,且接口可以多继承;
6、类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口;
三、抽象类与接口的区别
先用我自己的语言来描述吧,在我看来,两者都有优缺点。
抽象类最大的优点也就是其可以有效的提供某些方法的部分实现,比如你在一个抽象类里面加入一个新的具体方案时,它的所有子类都可以得到,所以它更容易扩展。但由于JAVA的单继承性,它的效能就大打折扣。
至于接口,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。简单来说,接口就是定义混合类型的理想工具。
四、抽象类与接口的最佳共用
基于抽象类和接口的性质特点,所以最基本、最经典的组合就来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说,在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这样就都可以发挥它们的最大优点。这个模式就是“缺省适配模式”。
最简单的例子:
public interface Target {
void f1();
void f2();
void f3();
void f4();
void f5();
}
public class DefaultAdapter implements Target {
public void f1() {}
public void f2() {}
public void f3() {}
public void f4() {}
public void f5() {}
}
public class MyInteresting extends DefaultAdapter{
public void f5(){
System.out.println( "巴拉巴拉巴拉巴拉");
}
}