接口语法:public interface 接口名{
}
抽象类语法:访问权限修饰符 abstract class 类名{ }
public abstract class Person{
}
接口:
接口中只能定义静态常量,所有的属性默认添加public static final
接口中只能定义抽象方法,abstract关键字可以省略。定义接口可写可不写abstract
接口只能用public和default修饰。
接口不能对象实例化,不能创建对象。
接口可以作为引用,指向实现类,只能调用接口中的方法,不能调用实现类特有的方法。
抽象类和抽象方法的关系:
抽象类里可以没有抽象方法,就是说所有方法都是普通方法。
抽象方法所在的类必须是抽象类。
抽象类不能对象实例化,不能通过关键new 抽象类名();
抽象类的方法需要子类重写,如果子类不重写父类抽象方法,相当于继承了父类的抽象方法,那么子类也必须是抽象类。
接口和抽象类区别
1.
接口声明时用interface,abstract可写可不写,可以有多个父接口。
抽象类声明时用class,abstract必须写,只能有一个父类。
2.
接口中的属性默认public static final修饰。
抽象类中属性默认是default修饰。
3.
接口中不能写构造函数。(构造函数在创建对象时调用,接口不能创建对象,接口的子接口不能创建对象,接口的实现类不会调用接口的构造方法,所以不用写构造函数)。
抽象类中可以写构造函数。(抽象类不能创建对象不调用构造函数,但是抽象类的子类调用父类的构造函数,抽象类做父类可以写构造函数供子类调用。
4.
接口中只能有抽象方法,abstract可写可不写。不能有普通方法。
抽象类中可以有抽象方法,abstract必须写。也可以没有抽象方法,全是普通方法。
5.
接口中定义的是多个无关类的抽象方法。
抽象类中定义的同一类有父子关系的抽象方法。