zoukankan      html  css  js  c++  java
  • Java中的接口

     一.什么是接口?

    接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

     二.创建一个接口

    创建接口之前我们需要知道接口的一些必要的规则:

    1.Java中的接口只支持是public或者是包访问权限,不能是private或者是protected权限,但是包访问权限的接口在继承时将会出现只有在本包下的接口才可以继承,这就容易导致不知名的错误,所以推荐将所有的接口都设置为public权限。

    2.接口中的所有方法都是默认public的抽象方法没有方法体,所以当我们在接口中创建方法是,我们通常不去显式确认方法是public的。

    3.Java中可以设定字段。但是字段都是默认为static和final的也就是说都是常量。

    4.JavaSE8中增加了一个新特性,在接口中可以放置静态的非抽象方法。

    从第四点可以看出我们能在接口中创建一个main方法,并且使其运行。

     下面是一个我们自己创建的接口:

    package com.cjm.myinterface;
    
    public interface MyInterfaceText {
        int num = 0;// 常量
        void f1();//抽象方法
        static void f2() {
            System.out.println("JavaSE8的新特性可以在接口中写非抽象的静态方法!");
        }
       
    }

    在接口中创建一个main方法并且使其运行:

    public interface MyInterfaceText1 {
        public static void main(String[] args) {
            System.out.println("asdas");
        }
    }

    结果如下:

    三.接口继承接口

    假设现在拥有两个接口,一个接口想实现另外一个接口的方法,那么用什么方法呢?

    接口继承接口,与类实现继承相同,接口实现接口也是通过extends关键字。

    代码如下:

    public interface MyInterfaceText2 extends MyInterfaceText, MyInterfaceText1 {
        // 实现了一个接口继承了多个接口
    }

    多个接口继承使用逗号隔开。

    那么子接口将拥有父接口的所有抽象方法。

    四.通过接口实现Java的多继承

    c++中允许一个类拥有多个父类(基类),但是Java只允许有一个父类但是可以通过多接口来实现多继承。(逻辑上来讲,Java的确优于c++,人只有一个父亲,那么类也应该这样才能够符合这样的规律,毕竟计算机语言也只不过是现实生活的一个映射)。

    同样这样做也带来了极大的好处,它使得子类所需要开辟的资源大大减小了。多个父类,会将所有的父类的资源都加载一遍,其中可能有一些是子类不需要的。

    实现接口的类,也必须将接口中的抽象方法实现,同时如果要继承类还要实现接口,必须将继承类放在前面,实现接口放在后面。

    public class ClassInterface implements MyInterfaceText {
    
        @Override
        public void f1() {
            // TODO Auto-generated method stub
            System.out.println("实现接口中的方法!");
        }
    
        public static void main(String[] args) {
            MyInterfaceText yf = new ClassInterface();
        }
    }

     当我们将一个类实现一个接口时,那我们就可以将子类的实例对象向上转型为接口类型。多态的灵活性正是设计接口的原因。

    五.嵌套定义接口

    接口可以嵌套定义在接口或者类中。

    在类中去嵌套定义一个接口允许接口是private的。

    class ClassHasInterface {
        private interface A {// 使用嵌套定义,接口可以是私有的
            void f();
        }
    
        
    }
  • 相关阅读:
    总结一下HtmlAgilityPack
    sql server中获得刚刚插入的记录的主键ID
    关于存储过程的一点总结
    asp.net 中System.Web.UI.Page子类的成员变量的生存周期
    sql server存储过程模板
    第三方库HtmlAgilityPack的一个Bug
    如何在存储过程内部调用另一个存储过程 EXEC
    C#中的哈希表和字典的区别
    Android Intent的几种用法全面总结
    个人练习:ListView绑定数据和显示的几种方式
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9385931.html
Copyright © 2011-2022 走看看