• 菜鸡的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 定义的方法可以由接口名称直接调用

  • 相关阅读:
    【BZOJ 1007】【HNOI 2008】水平可见直线 解析几何
    【POJ 2653】Pick-up sticks 判断线段相交
    【NOIP 2004】虫食算
    【TYVJ 1463】智商问题 (闲得无聊)
    【BZOJ 2599】【IOI 2011】Race 点分治
    【BZOJ 3050】【USACO2013 Jan】Seating 线段树
    【BZOJ 3048】【USACO2013 Jan】Cow Lineup 滑块思想
    【BZOJ 1758】【WC 2010】重建计划 分数规划+点分治+单调队列
    【BZOJ 3049】【USACO2013 Jan】Island Travels BFS+状压DP
    【BZOJ 1468】Tree 点分治
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10123594.html
Copyright © 2020-2023  润新知