这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过。对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西: 
①接口的声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但是java没有这个关键字,但权限上可以理解为default),无论是private还是protected都是不可以的。 
②关于修饰符大小的说明:public>protected>默认>private,用一张表就是如下: 
 
③综合①②,问题出现了,为什么protected的权限比默认权限要高,但是却不能使用它修饰类或者接口呢?原因何在?本题评论如此之少,也没有人深入揭示问题所在,都只是说什么由于需要被其他包其他类实现,所以就是public,那么对于默认修饰符的存在你们怎么解释?我简单说明一下:首先,这里对于接口声明的默认修饰符,可不是像接口中的方法那样,不写修饰符就默认是public了,接口的声明不写修饰符就是default权限,只能同包的类可以访问,其他包是不行的,不信试试看。其次虽然protected权限要比默认权限高,但是对于类或者接口的声明却不能使用,可以简单这么理解:一个外部类或者接口,它的上一层结构是包,因此他们只有两个作用域:同包,任意位置。除此之外的权限没有任何意义,而基于此,public和默认权限就是足够的了,不需要使用protected这种多余的权限造成更为复杂的类关系,因此java限制了类或接口的声明,就仅限于public和默认。

在使用 interface 声明一个接口时,只可以使用那个修饰符修饰该接口?的更多相关文章

  1. JDK8以后接口是可以定义实现方法,必须需要default修饰符修饰

    package com.company.java.oop.cls; interface IB { default void doMethod1() { System.out.println(" ...

  2. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal接口的成员默认访问修饰符是public C#修饰符--类 ...

  3. php5权限控制修饰符,interface和abstract

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  4. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  5. java中抽象类与接口中方法访问修饰符问题 (

    1.抽象类中的抽象方法(其前有abstract修饰)不能用private.static.synchronized.native访问修饰符修饰.原 因如下:抽象方法没有方法体,是用来被继承的,所以不能用 ...

  6. 接口和抽象类的区别,注意JDK8的接口可以有实现。

    Java中,抽象类和接口有相似的地方.下面我们就来细说说接口和抽象类的异同. 首先是相同的地方: 1. 接口和抽象类都能定义方法和属性. 2. 接口和抽象类都是看作是一种特殊的类.大部分的时候,定义的 ...

  7. 10.使用final关键字修饰一个变量时...

    10.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 答:引用不能变,不能将引用再次指向另一个新的对象,但引用所指向的对象中的内容是可以改变的. 补充: 1.对于基本类型,f ...

  8. JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别

    abstract修饰符可以修饰类和方法. (1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型.抽象类就相当于 ...

  9. 我的第一个python web开发框架(18)——前台页面与接口整合

    由于我们前后台系统没有分开,所以前台页面调用接口时,可以直接使用后台管理系统已经完成的接口,不过后台管理系统接口的访问加上了登录验证,所以需要将前台要用到的接口进行处理,让它们设置到白名单当中 我们打 ...

随机推荐

  1. 多线程处理慢sql查询小笔记~

    多线程处理慢sql查询以及List(Array)的拆分 系统数据量不大,但是访问速度特别慢,使用多线程优化一下!!! 优化结果:访问时间缩短了十几秒  25s --> 8s 一.List的拆分: ...

  2. 【转】Java迭代:Iterator和Iterable接口

    Java迭代 : Iterator和Iterable接口 从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... ...

  3. jps -- process information unavailable

    在之前停止java进程时,使用了 kill -9,结果进程未正常退出. 之后每次执行 jps 命令时都会打印出 -- process information unavailable 在ls /tmp/ ...

  4. 《Python》IO模型

    一.IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步:一件事情做完再做另一件事情 异步:同时做多件事情 阻塞:sleep.input.join.shutdown.get.acquire ...

  5. 从mysql读取数据写入mongo

    # coding:utf-8 # Created by qinlin.liu at 2017/3/14 import pymysql import datetime #pymongo说明文档  : h ...

  6. 学习net core的一些疑问?

    所有的内容是否一定都要依赖注入? 获取配置文件的方式是否在类库是获取不到环境变量的? 老出现:InvalidOperationException: Unable to resolve service ...

  7. JSON转化

    相关链接 : http://blog.csdn.net/gchb9527/article/details/8688279 --------------------------------------- ...

  8. 牛客第三场多校 E Sort String

    链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 Eddy likes to play with string which is a sequen ...

  9. JavaWeb:c3p0配置问题java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

    错误显示 java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector at dbdemo.JdbcUtils.<clinit> ...

  10. 继承and派生

    1.什么是继承?(python2与python3) 在程序中继承是一种新建子类的方式,新创建的类称之为子类\派生类,被继承 的类称之为父类\基类\超类 继承描述的是一种遗传关系,儿子可以重用爹的属性 ...