深入理解Java接口interface和内部类

Java 访问控制符

private    : 只能被当前类访问

protected : 可以被同包的类和任何子类访问(包内,包外)

default    : 可以被包内的任何内访问

public    : 任何类都可以访问

Java重载可以改变类的访问控制符么?

可以! 但只能将访问权限变大,不能缩小。比如

A extends B ,B中有一个M方法是 则M支持如下扩充:(private不支持重载)

default  —— protected

default  —— public

protected —— public

接口

接口是类么?

由下图可以看出,接口和类同属于Java数据类型的引用数据类型,他们是同等级的,接口并不是类。类是用class定义,而接口是inteface定义。

b3119313b07eca8061c651e2972397dda04483f7

接口中可以定义成员变量么?

接口的含义理解:接口可以理解成统一的"协议",而接口中的属性也属于协议中的内容;但是接口的属性都是公共的,静态的,最终的

接口的成员特点
A:成员变量 只能是常量。默认修饰符 public static final
B:成员方法 只能是抽象方法。默认修饰符 public abstract

接口内的函数 需要 public,private,protected,abstract 修饰么?

如果我们在定义一个接口时,给内部的某个接口加上“public” 修饰符,不会报错,但是编译器会提示如下:

image

意思是“public” 修饰符是多余的。

那么我们加 private,protected会怎么样呢?

image

可以看出 接口的内部函数默认就是public的。

1. 如果接口方法是private 只有当前接口能访问,哪还有什么意义。

2. 如果是default或者protected : 因为接口谈不上子类只有implement关系,protected不能修饰。那能不能不加任何访问控制符呢?实际编译不加任何 控制符会自动变为public。(接口设计的初衷就是大家都能调用访问)

在接口前加 abstract字段:

image

和增加“public” 结果相同,接口内的函数默认就是抽象public函数,不需要增加 abstart public关键字

定义接口时 public,private,protected 含义?我们定义一个class会用这几种访问控制符修饰。

接口不能用 private  和 protected 修饰:

1、 private 接口只能自身访问自身,让接口失去了任何意义。

2、protected 修饰则表示只能被子类访问和同一个包内的其它类访问。protected比default多部分类可以访问:包外的子类。

那么对于接口来说,它没有任何子类,所以protected对它无效。

public接口和 default接口

default接口只能在包内写一个内去implement,包外则不能去implement。

内部接口

内部接口是定义在一个类的内部的接口。

内部接口的优点:

1.一种对那些在同一个地方使用的接口进行逻辑上分组;
2.封装思想的体现;
3.嵌套接口可以增强代码的易读性和可维护性;

在Java标准库中使用内部接口的一个例子是java.util.Map和Java.util.Map.Entry。这里java.util.Map同样被当成命名空间使用。Entry并不属于全局作用域范围.

内部接口需要加上static么

比如封装的一个Request类,用于请求后台的某个参数,那我们肯定需要设置一个监听器接口来监听请求的状态及返回的结果,设置结构如下:

public class Request {

private ListenerInterface listener;

static public interface ListenerInterface{
        void onResult();
    }

public void request(){
        doResest();
        listener.onResult();
    }

private void doResest(){

}
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/03f1c0b2b65a0610318cb2f46dd275b0.html