什么是抽象类:
用abstract来修饰的类就称为抽象类,用abstract来修饰的方法成为抽象方法,子类继承抽象类的时候必须实现父类的抽象方法,(抽象类可以没有抽象方法,但是如果抽象类没有抽象方法,或者没有其他类继承于它,那么抽象类就失去了意义)
什么时候用抽象类:
当具体实现需要子类来完成的时候,就可以用抽象类。
抽象类和普通类的区别:
1、抽象方法必须是public或者protected的,如果为抽象方法用private修饰,则该方法不能被子类实现,便无法实现该方法),默认的情况下用public。
2、抽象类无法创建对象;
3、子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类。
什么是接口
接口是一些方法特征的集合,接口比抽象类更抽象,接口中所以方法都没有具体实现,都由其实现类来实现,并且一个类可以实现多个接口,如果是普通类则必须实习该接口的所有方法,如果是抽象类则不必.
从更深层次的角度来说,接口是定义与实现的分离,通过面向接口编程可以降低耦合
抽象类和接口的区别
1、抽象类中的可以有非抽象方法,而接口中只能存在抽象方法;
2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3、接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4、一个类只能继承一个抽象类,而一个类却可以实现多个接口。
如何选择是使用抽象类还是接口
如果需要包含一些具体实现的那么就选择抽象类,如果只是定义规范那就用接口
//使用抽象形式定义Test:
abstract class Test{
abstract void test1();
abstract void test2();
}
//使用接口形式定义Test:
interface Door{
void test1();
void test2();
}
//在抽象类中可以有普通方法abstract class Test{ abstract void test1(); abstract void test2(); public void test3(){ System.out.println(“test3”); }}