interface 可以被 private、protected、 static、 final 修饰吗?

程晨c 2015-10-30 05:27:42
如题?
多数人说不能,但我测试发现可以被private、protected、 static修饰, 不能被final修饰。


public class E
{

public static void main(String args[])
{
System.out.println("hello");
}

//用private、protected、 static修饰,都可以通过编译。不能用final修饰
//protected interface D1
//private interface D1
static interface D1
{
void x();
}
}
...全文
1704 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
拾叁L 2015-11-02
  • 打赏
  • 举报
回复
引用 6 楼 seleron 的回复:
[quote=引用 4 楼 ll8128 的回复:] 我之前也没想过这个问题,刚才翻了下书,书上是这么写的。 The interface body can contain abstract methods, default methods, and static methods. (接口中可以包含抽象方法,默认方法和静态方法) All abstract, default , and static methods in an interface are implicitly public,so you can omit the modifier. (接口中所有的抽象、默认和静态方法都隐含是public类型,你可以不写public) 也就是说你用private、protected是没有作用的。final表示不可改变肯定是不可以的
“也就是说你用private、protected是没有作用的。” 我说的是修饰interface,而不是修饰interface中的方法[/quote]原来你是这个意思啊。多数人说不可以被private,protected修饰都和你这样的情况不一样的,他们应该指的是单独的一个接口不是你这样的 “内部接口”。你这样写内部接口是什么意义呢?我们平时定义的接口方式不能满足你的需求吗?虽然我不知道你这样写是否可以。但是你不管使用private或者是protected这样的访问修饰符修饰都使这个类的成员及这个接口的访问域减少
Ajsgn1 2015-10-31
  • 打赏
  • 举报
回复
没有想过写内部接口的应用场景。。。
程晨c 2015-10-31
  • 打赏
  • 举报
回复
引用 4 楼 ll8128 的回复:
我之前也没想过这个问题,刚才翻了下书,书上是这么写的。 The interface body can contain abstract methods, default methods, and static methods. (接口中可以包含抽象方法,默认方法和静态方法) All abstract, default , and static methods in an interface are implicitly public,so you can omit the modifier. (接口中所有的抽象、默认和静态方法都隐含是public类型,你可以不写public) 也就是说你用private、protected是没有作用的。final表示不可改变肯定是不可以的
“也就是说你用private、protected是没有作用的。” 我说的是修饰interface,而不是修饰interface中的方法
程晨c 2015-10-31
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
interface只能被public 修饰,不能为private或static等修饰 你这是写在类里面,你单独写个interface试试,就会提示你的
虽然是写在类里了,但也证实了 interface 可以被 private、protected、 static 修饰
拾叁L 2015-10-30
  • 打赏
  • 举报
回复
我之前也没想过这个问题,刚才翻了下书,书上是这么写的。 The interface body can contain abstract methods, default methods, and static methods. (接口中可以包含抽象方法,默认方法和静态方法) All abstract, default , and static methods in an interface are implicitly public,so you can omit the modifier. (接口中所有的抽象、默认和静态方法都隐含是public类型,你可以不写public) 也就是说你用private、protected是没有作用的。final表示不可改变肯定是不可以的
dracularking 2015-10-30
  • 打赏
  • 举报
回复

public class Test {

	public static void main(String[] args) {
        new D1() {
			public void x() {
				
			}
        	
        };
	}
	
	public void go() {
		new D1() {
			public void x() {
				
			}
        	
        };
	}

	static interface D1 {
		void x();
	}
}
貌似static修饰后没有什么特别影响
飏飏一蝶 2015-10-30
  • 打赏
  • 举报
回复
private、protected、 static本来就不能修饰外部类 而interface是一种特殊的public abstract class 专门用来被继承(或则叫实现吧)的
  • 打赏
  • 举报
回复
interface只能被public 修饰,不能为private或static等修饰

你这是写在类里面,你单独写个interface试试,就会提示你的

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧