每天进步一点点!
Java中接口和抽象类?
Java中一个类只能继承一个抽象类,但是可以实现多个接口
a.什么是接口
接口就是比“抽象类"还“抽象”的“抽象类”, 可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。接口是完全面向规范的,规定了-批类具有的公共方法规范。
- 从接口的实现者角度看,接口定义了可以向外部提供的服务。
- 从接口的调用者角度看,接口定义了实现者能提供那些服务
接口就是一种契约,协议。
b.格式
[访问修饰符号] interface 接口name [extends 父接口1,父接口2] {
常量定义:
方法定义:
}
c.要点
1、访问修饰符:只能是public 或者默认
2、extends:接口支持多继承
3、接口中的属性只能是常量,默认就是public static finnal
4、接口中的方法默认是public abstract
JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
d.接口和抽象类的区别
// 抽象类
public abstract class Person{
public abstract void say();
public void eat(){};
}
// 接口
public interface Person{
public static final int a=10;
//JDK1.8
default void sayHello(){
System.out.println("Hello World");
}
public static void sayJava(){
System.out.println("Hello Java");
}
public void say();
}
- 相同点
- 接口和抽象类都不能被实例化;
- 抽象类的子类或接口的实现类都实现了抽象类或接口的方法后才能被实例化;
- 不同点
接口 | 抽象类 |
---|---|
接口中没有构造函数 | 抽象类中可以有构造函数 |
接口中没有代码的实现(在Java1.8中可以用default或static来实现方法),即默认方法隐式为public abstract ,抽象方法 | 抽象类可以由普通成员方法,且方法修饰符可以由public 、protected 、default ,可以包含抽象和非抽象的方法。 |
接口中的属性只能是常量,即public static final | 抽象类可以不包含非final 的变量,默认为default |
接口可以多继承extends多个接口 | 抽象类只能单继承 |
总之,接口强调特定功能的实现;而抽象类则强调所属关系。
抽象类中可以包含抽象方法和非抽象方法,并不是很严格;
而接口中只包含抽象方法(在jdk1.8之前,jdk1.8可用default或static来实现非抽象的方法),严格;