zoukankan      html  css  js  c++  java
  • JDK8后接口中是可以写默认方法和静态方法的哦,不清楚的进来看看吧!!!

      最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下接口中的变化。一起来进阶提升吧:463257262

    JDK8接口的变化

    1. JDK8中接口的新增

      在JDK8中针对接口有做增强,在JDK8之前

    interface 接口名{
        静态常量;
        抽象方法;
    }
    

      JDK8之后对接口做了增加,接口中可以有默认方法静态方法

    interface 接口名{
        静态常量;
        抽象方法;
        默认方法;
        静态方法;
    }
    

    2.默认方法

    2.1 为什么要增加默认方法

      在JDK8以前接口中只能有抽象方法和静态常量,会存在以下的问题:

      如果接口中新增抽象方法,那么实现类都必须要抽象这个抽象方法,非常不利于接口的扩展的

    package com.bobo.jdk.inter;
    
    public class Demo01Interface {
    
        public static void main(String[] args) {
            A a = new B();
            A c = new C();
        }
    }
    
    interface A{
        void test1();
        // 接口中新增抽象方法,所有实现类都需要重写这个方法,不利于接口的扩展
        void test2();
    }
    
    class B implements  A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    }
    
    class C implements A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    }
    
    

    2.2 接口默认方法的格式

      接口中默认方法的语法格式是

    interface 接口名{
        修饰符 default 返回值类型 方法名{
            方法体;
        }
    }
    
    package com.bobo.jdk.inter;
    
    public class Demo01Interface {
    
        public static void main(String[] args) {
            A a = new B();
            a.test3();
            A c = new C();
            c.test3();
    
        }
    }
    
    interface A{
        void test1();
        // 接口中新增抽象方法,所有实现类都需要重写这个方法,不利于接口的扩展
        void test2();
    
        /**
         * 接口中定义的默认方法
         * @return
         */
        public default String  test3(){
            System.out.println("接口中的默认方法执行了...");
            return "hello";
        }
    }
    
    class B implements  A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    
        @Override
        public String test3() {
            System.out.println("B 实现类中重写了默认方法...");
            return "ok ...";
        }
    }
    
    class C implements A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    }
    
    

    2.3 接口中默认方法的使用

      接口中的默认方法有两种使用方式

    1. 实现类直接调用接口的默认方法
    2. 实现类重写接口的默认方法

    3. 静态方法

      JDK8中为接口新增了静态方法,作用也是为了接口的扩展

    3.1 语法规则

    interface 接口名{
        修饰符 static 返回值类型 方法名{
            方法体;
        }
    }
    
    package com.bobo.jdk.inter;
    
    public class Demo01Interface {
    
        public static void main(String[] args) {
            A a = new B();
            a.test3();
            A c = new C();
            c.test3();
            A.test4();
        }
    }
    
    interface A{
        void test1();
        // 接口中新增抽象方法,所有实现类都需要重写这个方法,不利于接口的扩展
        void test2();
    
        /**
         * 接口中定义的默认方法
         * @return
         */
        public default String  test3(){
            System.out.println("接口中的默认方法执行了...");
            return "hello";
        }
    
        /**
         * 接口中的静态方法
         * @return
         */
        public static String test4(){
            System.out.println("接口中的静态方法....");
            return "Hello";
        }
    }
    
    class B implements  A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    
        @Override
        public String test3() {
            System.out.println("B 实现类中重写了默认方法...");
            return "ok ...";
        }
    
    }
    
    class C implements A{
        @Override
        public void test1() {
    
        }
    
        @Override
        public void test2() {
    
        }
    }
    
    

    3.2 静态方法的使用

      接口中的静态方法在实现类中是不能被重写的,调用的话只能通过接口类型来实现: 接口名.静态方法名();
    在这里插入图片描述

    4. 两者的区别介绍

    1. 默认方法通过实例调用,静态方法通过接口名调用
    2. 默认方法可以被继承,实现类可以直接调用接口默认方法,也可以重写接口默认方法
    3. 静态方法不能被继承,实现类不能重写接口的静态方法,只能使用接口名调用
  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/dengpengbo/p/15146468.html
Copyright © 2011-2022 走看看