zoukankan      html  css  js  c++  java
  • Java8---接口的默认方法

    一、接口的默认方法

    在接口中新增了default方法和static方法,这两种方法可以有方法体

    1、static方法  接口里的静态方法,即static修饰的有方法体的方法不会被继承或者实现,只能被自身调用, 但是静态变量会被继承

    示例代码:

    public interface DefalutTest {
        static int a =5;
        default void defaultMethod(){
            System.out.println("DefalutTest defalut 方法");
        }
    
        int sub(int a,int b);
    
        static void staticMethod() {
            System.out.println("DefalutTest static 方法");
        }
    }
    

     例如:我们添加一个接口DefalutTest的实现类DefaultTestImpl

    public class DefaultTestImpl implements DefalutTest{
    
        @Override
        public int sub(int a, int b) {
            // TODO Auto-generated method stub
            return a-b;
        }
    
    }
    

     如下图所示是这个实现类中所有可调用的方法:

    在这些方法里面我们无法找到staticMethod方法,则说明接口中的static方法不能被它的实现类直接使用。

    但是我们看到了defaultMethod,说明实现类可以直接调用接口中的default方法;

    2、default方法

        default方法可以被子接口继承亦可被其实现类所调用, default方法被继承时,可以被子接口重写方法。

        如果一个类实现了多个接口,且这些接口中无继承关系,这些接口中若有相同的(同名,同参数)的default方法,则接口实现类会报错,接口实现类必须通过特殊语法指定该实现类要实现哪个接口的default方法

        特殊语法:<接口>.super.<方法名>([参数])

    public class SubTestImp implements SubTest,DefalutTest{
    
        @Override
        public int sub(int a, int b) {
            // TODO Auto-generated method stub
            return a-b;
        }
    
        @Override
        public void defaultMethod() {
            // TODO Auto-generated method stub
            DefalutTest.super.defaultMethod();
        }
    
    }
    我话讲完!谁赞成?谁反对?
  • 相关阅读:
    第11条:谨慎地覆盖clone
    第10条:始终要覆盖toString
    第9条:覆盖equals时总是覆盖hashCode
    第8条:覆盖equals时请遵守通用约定
    第7条:避免使用终结方法
    第6条:消除过期的对象引用
    第5条:避免创建不必要的对象
    第4条:通过私有构造器来强化不可实例化能力
    第3条:用私有构造器或者枚举类型强化Singleton属性
    第2条:遇到多个构造器参数时要考虑用构建器
  • 原文地址:https://www.cnblogs.com/wffzk/p/14839213.html
Copyright © 2011-2022 走看看