1、Java8接口
- 常量: public static final
- 抽象方法:public abstract
- 默认方法:defalut ,子类可以重写也可以不重写
- 静态方法:static
public interface Shape {
int length = 0;//常量 public static final
Double getArea(double length, double width);//抽象方法 public abstract
//问题:所有子类必须都要实现该方法
//Double getPerimeterOfQuadrilateral(double length, double width);
/**
* 新增默认方法,为圆形计算周长
*
* @param redius 半径
* @return java.lang.Double
*/
default Double getPerimeterOfCircle(double redius) {
return 3.14 * 2 * redius;
}
/**
* 新增默认方法,为四边形扩展计算周长
*
* @param length 长
* @param width 款
* @return java.lang.Double
*/
default Double getPerimeterOfQuadrilateral(double length, double width) {
return (length + width) * 2;
}
default void print(){}//默认方法空实现
/**
* 接口描述方法,描述接口用途及其他信息
*
* @return java.lang.String
*/
static String describe() {
return "我是一个几何图形接口";
}
}
public class Circle implements Shape {
@Override
public Double getArea(double length, double width) {
//调用方法时默认length传半径
return 3.14 * length * length;
}
public String staticMethod() {
return Shape.describe();
}
}
public class Trangle implements Shape{
@Override
public Double getArea(double length, double width) {
return length * width / 2;
}
}
public class DefaultMethodTest {
public static void main(String[] args) {
System.out.println(new Circle().getPerimeterOfCircle(3));
System.out.println("-------------------------------------------");
System.out.println(Shape.describe());//我是一个几何图形接口
System.out.println(new Circle().staticMethod());//我是一个几何图形接口
}
}
2、抽象类
- 常量
- 变量
- 构造方法
- 抽象方法
- 非抽象方法
3、接口和抽象类区别
抽象类和接口的详解(实例)_chajinglong的专栏-CSDN博客_抽象类实例
- 实例化:抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象;接口变量必须指向实现所有接口方法的类对象。
- 子类:抽象类要被子类继承;接口要被类实现。
- 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。
- 实现接口时,如果不能全部实现接口方法,那么该类也只能为抽象类。
- 变量:接口里定义的变量只能是公共的静态的常量;抽象类中的变量是普通变量。
- 方法:接口有抽象方法、默认方法、静态方法;抽象类中有抽象方法和非抽象方法,抽象类里可以没有抽象方法。
- 类:如果一个类里有抽象方法,那么这个类只能是抽象类
- 实现/继承:接口可继承接口,并可多继承接口,但类只能单继承。
设计理念区别:
抽象类的意义是描述一类事物,接口是描述一类事物的一类固定动作
抽象类是对类抽象,包括属性和行为
接口是对行为抽象,主要是行为
后面有的门需要报警如何处理?
- 三个方法声明在抽象类中:问题是所有的门都得实现报警方法。
- 三个方法声明在接口中:所有实现类都得实现开关门接口,有的门只有报警功能。
聊聊Java8接口中的default和static方法_zab635590867的博客-CSDN博客_接口中的default方法和static方法
接口中的方法_sinat_34089391的博客-CSDN博客_接口中的方法
java8中接口default、static新特性,与抽象类区别_zyq_2014的博客-CSDN博客_抽象类default
java中接口(interface)详解_sun_shine56的博客-CSDN博客_java 接口
【JAVA】接口中的default和static方法_Z小旋-CSDN博客_default static
Java 中extends与implements使用方法_chen_chun_guang的专栏-CSDN博客_extends implements