1.什么是抽象类?
含有abstract 修饰符的类就称为抽象类,抽象类不能创建实例。含有抽象方法的类必须被定义为 abstract class 。 在抽象类中,方法可以不被 abstract 所修饰。 但是抽象方法必须在子类中实现 ,所以,不能有抽象的静态方法和抽象构造方法。子类如果没有实现父类中所有的抽象方法,则子类也必须定义为 abstract 类。抽象类需要被继承才可以使用,而被final所修饰的类是无法被继承的,所以 abstract 和 final 无法共存。
抽象类示例:
定义一个为抽象类的父类Test
public abstract class Test {
public abstract void delect();
abstract void insert();
public void register() {
}
}
子类Test1实现了父类中所有的抽象方法。
public class Test1 extends Test{
@Override
public void delect() {
// TODO Auto-generated method stub
}
@Override
void insert() {
// TODO Auto-generated method stub
}
}
子类Test2只实现了父类的一个抽象方法。
public abstract class Test2 extends Test{
@Override
public void delect() {
// TODO Auto-generated method stub
}
}
此时的子类Tets2只实现了父类Test 中的部分抽象方法,因此,子类Test2 也要被定义为abstract 类。
2.什么是接口?
接口是抽象类的变体。在接口中所有的方法都是抽象的。多继承性可以通过实现这样的接口而获得。在接口中,所有方法都是抽象的,没有一个有程序体。接口中的方法定义默认为 public abstract 类型,接口中的成员变量类型默认为 public static final 。
接口代码示例:
public interface Test {
public abstract void delect();
public abstract void insert();
public static final int age=10;
}
3.两者的区别
1.抽象类中可以有构造方法,接口中不能有构造方法;
2.抽象类中可以有普通的成员变量,接口中没有普通成员变量;
3.抽象类中可以包含静态方法,接口中不能有静态方法;
4.一个类可以实现多个接口,但只能继承一个抽象类;
5.接口可以被多重实现,抽象类只能被单一继承;
6.使用extends 关键字继承抽象类 ,使用implements 实现接口。