zoukankan      html  css  js  c++  java
  • java基础篇 之 接口

    组合接口时的名字冲突:

    看下面这段代码:

    interface I1 {
        int f();
    }
    
    interface I2 {
        void f();
    }
    
    interface I3 {
        int f(int a);
    }
    
    class C {
        public void f() {
            System.out.println(1);
        }
    }
    
    class C1 extends C implements I2 {
    
    }
    class C2 extends C implements I3 {
        @Override
        public int f(int a) {
            return 1;
        }
    }
    //这里报错了,是因为覆盖,实现跟重载被混在了一起
    //C3继承了C,这个时候就有了一个void f()的方法
    //C3实现了I1,就不得不实现它的int f()
    //这个时候,C3就会出现两个同名函数,这显然是错误的
    //class C3 extends C implements I1 {
    //
    //}
    
    接口中的域:

    因为放入接口中的任何域都是自动static和final的,所以接口就成了一种很便捷的用来创建常量的工具。

    public class Interface {
        // 成员变量省略了 public static  final
        // 接口不能初始化,如果要访问接口中的属性,只能通过类名直接调用,所以必须public+static
        // 接口中的字段会被所有接口的实现类共享,所以不能被某一个子类所改变,以避免对其他子类造成影响
        // 所以必须final
        String ONE = "1";
        String TWO = "2";
    }
    
    嵌套接口:
    class Test {
        private interface B {
            void f();
        }
    
        class BImpl implements B {
            @Override
            public void f() {
                System.out.println(1);
            }
        }
    
        public B getB() {
            return new BImpl();
        }
    }
    
    public class Interface {
        public static void main(String[] args) {
            Test t = new Test();
            t.getB();
        }
    }
    

    我们看这种情况,提出一个问题,t.getB();的返回值我们要怎么接收呢?返回的是一个类中的私有的接口类型的对象。我们直接t.B肯定是不行的。这个时候,我们只能将返回值交给有权使用它的对象,所以我们要多定义一个属性或者方法

    class Test {
        private interface B {
            void f();
        }
    
        class BImpl implements B {
            @Override
            public void f() {
                System.out.println(1);
            }
        }
    
        public B bRef;
    
        public B getB() {
            return new BImpl();
        }
    }
    
    public class Interface {
        public static void main(String[] args) {
            Test t = new Test();
            t.bRef = t.getB();
        }
    }
    
  • 相关阅读:
    JavaScript constructor prototyoe
    bootstrap固定响应式导航
    跨浏览器事件处理程序
    原生JS实现字符串分割
    关于css里的class和id
    js动态创建表格方法
    关于css的默认宽度
    js字符串大小写转换
    C++类的一个重要成员:静态成员(二)——静态成员的定义
    C++ 类的一个重要成员:静态成员(一)
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854447.html
Copyright © 2011-2022 走看看