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

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 类与接口(三)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

    作者:jinggod 出处:

原文地址:https://sihai.blog.csdn.net/article/details/79435908

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 类与接口(三)java中的接口与嵌套接口


 上一篇
类与接口(二)java的四种内部类详解 类与接口(二)java的四种内部类详解
引言内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类- 成员内部类- 局部内部类- 匿名内部类一、静态内部类 静态内部类: 一般也称”静态嵌套类“,在类中用 static声明的内部类。 因为是stat
2021-04-04
下一篇 
类与接口(五)java多态、方法重写、隐藏 类与接口(五)java多态、方法重写、隐藏
一、Java多态性面向对象的三大特性:封装、继承、多态。 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载。编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的多态。所以,一般说的多态都是运行时的多态
2021-04-04