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();
        }
    
        
    }
  • 相关阅读:
    asp.net mvc 学习
    ms sqlserver 清除数据库日志脚本
    DB、ETL、DW、OLAP、DM、BI关系结构图
    日期维度(周一为每周第一天)
    关于C#操作Excel,复制Sheet的记录
    ms sqlserver 登录失败 错误:4064
    通过sqlserver sa密码修改windows操作系统密码
    ssas 为绑定指定的大小太小,导致一个或多个列值被截断
    ExpandoObject的使用
    【慕课网实战】Spark Streaming实时流处理项目实战笔记三之铭文升级版
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9385931.html
Copyright © 2011-2022 走看看