jdk1.8接口

jdk1.8接口,第1张

jdk1.8接口

在1.8版本之前
接口中的常量必须复制,且接口中的方法都是抽象方法

public interface Bird {
    int a;  //这里会报错,因为常量必须赋值才行
    int b=10;
    void shout1(){} //这里报错,因为抽象方法没有方法体
    void shout(); //前面有默认修饰符 public abstract
}

1.8版本中接口的新特性
可以有default修饰的方法或者static修饰的静态方法

public interface Bird {
    
    public default void fly(){}     //非抽象方法用default修饰,前面的public可以省略

    public static void shout(){}    //静态方法用static修饰,前面的public可以省略
    
}

运行一下default定义的方法

public interface Bird {
    public default void shout(){
        System.out.println("渣渣渣");
    }
}
class RedBird implements Bird {

}

public class TEST {
    public static void main(String[] args){


        //Bird test =new Bird();  //编译报错,接口就算是jdk1.8也不能创建对象,接口不能被实例化。
        //test.shout();
        //Bird.shout(); // 编译报错。因为default方法不是静态不能用类名调用
        // default就不是给你接口准备的,


        RedBird redBird=new RedBird();
        redBird.shout();

        // 多态除了 重写的方法 是调用的子类之外, 其他的所有的东西 都是调用的父类  父类没有那就只能报错了。
        Bird test  = new RedBird();
        test.shout();
    }
}
渣渣渣
渣渣渣

Process finished with exit code 0

子类重写父类的方法 权限修饰符 必须大于等于父类的权限修饰符

public interface Bird {
     default void shout(){ //default方法前面的public不写会默认添加
        System.out.println("渣渣渣");
    }
}


class RedBird implements Bird {

//这里会报错,的加上public 子类重写重写父类的方法 权限修饰符 必须大于等于父类的权限修饰符
    void shout(){ //加上public才行
        System.out.println("红鸟叫渣渣渣");
    }
}

当一个类实现了多个接口,而多个接口中出现了 一样的 方法, 那么子类必须重写,谁都不用

public interface Animal {
    void shout();
    public default void eat(){
        System.out.println("Animal吃吃吃");
    }

}

public interface Bird {
    void shout();
    public default void eat(){
        System.out.println("Bird吃吃吃");
    }

}


class RedBird implements Bird,Animal {
    @Override
    public void shout() {

        System.out.println("重写的shout");
    }

    @Override
    public void eat(){
        System.out.println("重写的eat eat eat");
    }
}

public class TEST {
    public static void main(String[] args){

        RedBird redBird=new RedBird();
        redBird.eat();
        redBird.shout();


    }
}
重写的eat eat eat
重写的shout

静态方法不存在重写,是谁的 就是谁的。接口中的静态方法可以直接通过接口名调用

public interface Animal {

    //抽象方法
    public void method();

   public static void Activity(){
       System.out.println("这是Animal接口的静态方法");
   }
}

public interface Bird {

    //抽象方法
    public void method();

    public static void Activity(){
        System.out.println("这是Bird接口的静态方法");
    }
}

class RedBird implements Bird,Animal {

    @Override
    public void method() {
        System.out.println("这是redBird中重写的method方法");
    }

    public static void Activity(){
        System.out.println("这是RedBird的静态方法");
    }



}

public class TEST {
    public static void main(String[] args){

        //正常实例化
        RedBird test =new RedBird();
        test.method();

        //向上转型
        Animal animal=new RedBird();
        animal.method();

        //调用接口实现类(可能也算子类)RedBird中的静态方法
        RedBird.Activity();

        //直接调用接口Animal中定义的静态方法
        Animal.Activity();

        //直接调用接口Bird中定义的静态方法
        Bird.Activity();

    }
}
这是redBird中重写的method方法
这是redBird中重写的method方法
这是RedBird的静态方法
这是Animal接口的静态方法
这是Bird接口的静态方法

Process finished with exit code 0

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5687049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存