• 类与接口(三)java中的接口与嵌套接口


    一、接口

    1. 接口简介

    接口: 是java的一种抽象类型,是抽象方法的集合。接口比抽象类更加抽象的抽象类型。

    接口语法:

    [修饰符] [abstract] interface 接口名 [extends 父接口名列表]{
    [public] [static] [final] 常量;
    [public] [abstract] 方法;
    [public] [static] 方法{};//JDK1.8后
    [public] [static] 类/接口;
    }
    

    2. 接口成员的修饰符

    接口中的所有成员的访问权限默认强制是 public

    • 变量: 默认强制是public static final
    • 方法: 默认强制是public abstract,即抽象方法。但JDK1.8后,允许定义静态方法public static,接口存在非抽象方法;
    • 内部类/接口: 默认强制是 public static

    下面例子中的接口中定义了各种接口成员:

    public interface InterfaceTest {
    
    	int a = 10;//全局变量默认强制是 public static final
    	
    	 public static void staticMethod() {  //静态方法,JDK1.8下编译通过
    		 System.out.println("");
    	 }
    	 
    	  int abstractMethod(); //抽象方法
    	 
    	 public static abstract class InnerClass{//抽象内部类,默认强制 public static
    		 //......
    	 }
    	 
    	 enum MyEnum{RED,BLUE,GRREN} //枚举类,默认强制 public static
    	 
    	 interface InnerInteerface{ //嵌套接口,默认强制 public static
    		 void aa();
    	 }
    }
    
    class MyClass implements InterfaceTest{//实现上面的接口
    
    	@Override
    	public int abstractMethod() {//实现抽象方法
    		
    		return 0;
    	}
    }
    

    注意一下,实现接口并不需要实现接口里面的内部抽象类成员、或者嵌套接口成员;

    3. 接口的多继承

      接口是可以继承多个接口(在类中,是不允许多继承的)。由于接口的实例成员方法都是抽象方法,所以多继承不会对接口造成太大影响(不同父接口可以定义相同的方法),但还是有一点要注意的,多继承接口时,从父接口继承下来的方法,有相同的方法名,但不满足方法重载的条件,就会冲突。如果出现这种情况,编译将失败,不允许多继承。

    interface A{
    	void sameMethodA();
    }
    
    interface B{
    	void sameMethodA();
    	void sameMethodB(int a);//返回类型是void
    }
    
    interface C{
    	int sameMethodB(int a);//返回类型是 int
    }
    
    interface D extends A,B{ //编译通过,即使A,B定义了相同方法
    	
    }
    
    interface E extends B,C{//编译失败
    	
    }
    

    字接口D多继承父接口A,B成功,但子接口E却多继承父接口B,C失败,就是因为两个接口定义的sameMethodB()除了返回类型外,方法名、参数列表都一样,这不满足方法重载,导致继承时方法冲突。

    如果非得要多继承,Java的解决方案是使用 内部类或嵌套接口;

    4. 接口与抽象类的区别

    接口与抽象类的区别:

    • 抽象级别不一样: 接口更加抽象,JDK1.8前只允许抽象方法,JDK1,8后才允许存在静态方法;抽象类的抽象基本低,允许存在具体方法,甚至抽象类中可以没有抽象方法。但有抽象方法的类就必须是抽象类;
    • 接口对成员的定义时的修饰符都有固定的限制,参考前面;抽象类定义成员与普通类是一样的;
    • 接口中不允许定义初始化块(静态或实例),但抽象类允许定义这两种初始化块;
    • 接口中不能定义构造方法,但抽象类允许定义构造方法。

    补充:抽象类中的抽象方法的访问权限是不能是private

    二、嵌套接口

    嵌套接口: 就是定义在类或接口中的接口。

    嵌套接口的修饰符限制:

    • 不论定义在接口,还是类中,嵌套接口默认强制是 static这意味着,嵌套接口是没有局部的嵌套接口。
    • 接口定义在类中,可以使用四种访问权限,定义在接口种,则只有public
  • 相关阅读:
    ObserverPattern(观察者模式)-----Java/.Net
    MementoPattern(备忘录模式)-----Java/.Net
    SpringCloud-day02-服务消费者项目建立
    SpringCloud-基础项目构建
    idea git 整合使用
    springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config
    springcloud-知识点总结(二):Ribbon&Feign
    springcloud-知识点总结(一):Eureka
    layui-tree创建下拉树型选项框
    ztree带有选项框的树形菜单使用
  • 原文地址:https://www.cnblogs.com/jinggod/p/8503146.html
Copyright © 2020-2023  润新知