Java8基础(1):接口中的default和static方法

x33g5p2x  于2021-12-27 转载在 Java  
字(2.2k)|赞(0)|评价(0)|浏览(371)

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

Java8——抽象类+接口_小金是个小菜鸡-CSDN博客

Java 中extends与implements使用方法_chen_chun_guang的专栏-CSDN博客_extends implements

相关文章