zoukankan      html  css  js  c++  java
  • 菜鸡的Java笔记 第三十五 接口定义增强

    接口定义增强
            在java从一开始到现在接口之中的核心组成部分:抽象方法与全局常量,但是随着技术的不断发展,用户在使用过程之中发现了有一些问题
            如果说现在有一个接口经过了长年的使用,这个接口已经有了10W 个子类了,突然有一天你的老板说,接口里增加一个抽象方法
             并且要求这些接口子类的方法都一样,如果不同,一个个实现,如果相同呢?实现到死
             那么为了解决这样的问题,从JDK1.8开始为接口里面追加了两种方法的定义: default 定义普通方法, static 定义静态方法
            
             但是需要知道一点,即使接口之中提供有普通方法,这个接口也不能够直接实例化,还是依靠子类完成
            
             范例:在接口中定义普通方法

    package cn.mysterious;
    interface IMessage{
        public String getMsg();
        public default void print(){// 必须使用 default
            System.out.println(this,getMsg());
        }
    }
    class MessageImpl implements IMessage{
    
        @Override
        public String getMsg() {
            // TODO Auto-generated method stub
            return "hello world";
        }
        
    }
    public class StudyLang {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            IMessage msg = new MessageImpl();
            msg.print();
        }
    
    }

               
            如果你在整个设计执行之前中间追加了抽象类的话,这样的尴尬局面就不会有了
            除了 default 之外,也可以使用 static 定义静态方法,而静态方法的特点就是可以直接由类名称负责调用
            
            范例:使用 static 定义静态方法

    package cn.mysterious;
    interface IMessage{
        public String getMsg();
        public default void print(){ // 必须使用 default
            System.out.println(this,getMsg());
        }
        public static IMessage getInstance() {
            return new IMessage() { // 匿名内部类
                public String getMsg() {
                    return null;
                }
            };
            
        }
    }
    class MessageImpl implements IMessage{
    
        @Override
        public String getMsg() {
            // TODO Auto-generated method stub
            return "hello world";
        }
        
    }
    public class StudyLang {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            IMessage msg = IMessage.getInstance();
            msg.print();
        }
    
    }            

               
                使用 static 定义的方法可以由接口名称直接调用

  • 相关阅读:
    【DWM1000】 code 解密2一 工程初始化代码分析
    【DWM1000】 code 解密1一 去掉Main 函数多余内容
    Integration between SharePoint 2013 and CRM 2013 (On-Premise)
    Windows Server2012R2 添加Microsoft .NET Framework 3.5 功能失败的解决方法
    Windows Server2012R2 安装 SharePoint 2013 的必备组件
    SSRS: How to Display Checkbox on Report
    ADFS部署过程中设置network service对证书的读取权限
    Dynamics CRM2013 ScLib::AccessCheckEx failed
    ADFS3.0 Customizing the AD FS Sign-in Pages
    Dynamics CRM2013 picklist下拉项行数控制
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10123594.html
Copyright © 2011-2022 走看看