抽象类
1、被标注abstract的类是抽象类;
2、有抽象方法的类必须声明为抽象类;
3、抽象类可以没有抽象方法;
4、抽象类不能够被实例化
5、其他方面,抽象类像一个正常的类一样,可以有具体的数据、具体的方法
6、可以引用一个非抽象子类来定义一个抽象类的对象变量
public abstract class Person {
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public abstract void job();
}
public class Student extends Person{
@Override
public void job() {
System.out.println("苏学生");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Student();
person.job();
}
}
接口
1、接口不是类,而是对类的一组需求描述;
2、接口不含有实例域、静态方法,但是能有常量;
3、java8之前不能在接口中实现方法,现在可以实现简单的一些方法
4、接口中所有的方法默认为public
5、不能构造接口的对象,但能声明接口的变量,new的时候可以用引用了接口的类对象
6、一个可以实现多个接口
7、接口中所有方法都是抽象的
抽象类和接口
不同
接口是用interface来表示,子类使用implements来实现接口,他需要把接口中声明的所有方法实现;抽象类是通过abstract来表示,其子类用extends来继承抽象类,如果子类不是抽象类,他需要把抽象类中所有抽象方法实现,如果子类是抽象类,可以先不实现。
- 抽象类中有抽象方法也可以有普通方法,接口中只能有抽象方法,用public abstract修饰;java8之后,接口也可以有简单方法了
- 接口没有构造器抽,象类有构造器,
- 接口内只能有常量,用public static final修饰且必须赋初值;抽象类有普通成员变量和常量
- 一个类可以实现多个接口,但只能继承一个抽象类。接口自己本身可以通过 extends关键字扩展多个接口。
- 抽象类中可以有静态方法,接口中不可以有静态方法;
- 抽象类单继承其他类,多实现其他接口,接口多继承其他接口,但不能实现接口和继承其他类。
- 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象, 是一种行为的规范。
相同
1.抽象类和接口都不能被实例化;
2.抽象类和接口都具有抽象方法;
3.抽象类和接口都是为多态作准备,都用于其他类实现。