一个类中如果有一个内部接口,那这个内部接口是不是静态的?

zb1112009 2010-06-04 06:19:27
比如:
public class MyClass{
interface I1{
void method1();
}
}
MyClass中的I1接口是静态的还是非静态的?
...全文
101 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leisore 2010-06-04
  • 打赏
  • 举报
回复
和内部类的概念类比而言
内部接口是静态的,测试如下:

/*
* file: InnerInterface.java
* class: InnerInterface
*
* description:
*
* @author: leisore
* @version: V1.0.0
*/
package cn.leisore.daily._2010_06_04;

public class InnerInterface {

private interface PI {}

protected interface protectedI {}

interface friendI {}

public interface publicI {}

public static interface staticPublicI {}


public InnerInterface() {
}
public static void main(String[] args) {
}
}
/**
* desc:
* XXX<br>
* ----------------------------------------------------------------------------
* ver. date who what
* ----------------------------------------------------------------------------
* 0.0.1 2010-6-4 leisore add
* ----------------------------------------------------------------------------
*/
package cn.leisore.daily._2010_06_04;

/**
* TestInnerInterface
*
* @author leisore
* @since version 0.0.1
*/
public class TestInnerInterface {

public static void main(String[] args) {

InnerInterface.friendI i1 = new InnerInterface.friendI() {};
InnerInterface.protectedI i2 = new InnerInterface.protectedI() {};
InnerInterface.publicI i3 = new InnerInterface.publicI() {};

System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
}
}
/**
输出:
n.leisore.daily._2010_06_04.TestInnerInterface$1@10b30a7
cn.leisore.daily._2010_06_04.TestInnerInterface$2@1a758cb
cn.leisore.daily._2010_06_04.TestInnerInterface$3@1b67f74
*/

内部类

/**
* desc:
* XXX<br>
* ----------------------------------------------------------------------------
* ver. date who what
* ----------------------------------------------------------------------------
* 0.0.1 2010-6-4 leisore add
* ----------------------------------------------------------------------------
*/
package cn.leisore.daily._2010_06_04;

import cn.leisore.daily._2010_06_04.InnerInterface.protectedI;

/**
* InnerClass
*
* @author leisore
* @since version 0.0.1
*/
public class InnerClass {

private class I1 {}
private static class I2 {}

class I3 {}
static class I4 {}

protected class I5 {}
protected static class I6 {}

public class I7 {}
public static class I8 {}

public static void main(String[] args) {
InnerClass ic = new InnerClass();
InnerClass.I1 i1 = ic.new I1();
InnerClass.I2 i2 = new InnerClass.I2();
InnerClass.I3 i3 = ic.new I3();
InnerClass.I4 i4 = new InnerClass.I4();
InnerClass.I5 i5 = ic.new I5();
InnerClass.I6 i6 = new InnerClass.I6();
InnerClass.I7 i7 = ic.new I7();
InnerClass.I8 i8 = new InnerClass.I8();

class MC {}
MC mc = new MC();

System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println(i5);
System.out.println(i6);
System.out.println(i7);
System.out.println(i8);
System.out.println(mc);
}
}
/**
输出:
cn.leisore.daily._2010_06_04.InnerClass$I1@69b332
cn.leisore.daily._2010_06_04.InnerClass$I2@173a10f
cn.leisore.daily._2010_06_04.InnerClass$I3@530daa
cn.leisore.daily._2010_06_04.InnerClass$I4@a62fc3
cn.leisore.daily._2010_06_04.InnerClass$I5@89ae9e
cn.leisore.daily._2010_06_04.InnerClass$I6@1270b73
cn.leisore.daily._2010_06_04.InnerClass$I7@60aeb0
cn.leisore.daily._2010_06_04.InnerClass$I8@16caf43
cn.leisore.daily._2010_06_04.InnerClass$1MC@66848c
*/

nj_dobetter 2010-06-04
  • 打赏
  • 举报
回复
对于I1的使用并不需要MyClass对象的存在,所以I1是静态的。
见http://www.javaeye.com/problems/39076
atremis 2010-06-04
  • 打赏
  • 举报
回复
static不需要人为的实例化,interface表示调用时必须要实例化

因此2个是矛盾的,不会一起出现
paullbm 2010-06-04
  • 打赏
  • 举报
回复
非静态的!!

你也可以自己在别的包中写一个测试类,直接用MyClass去调用I1就知道是哪种了!
pejayshine 2010-06-04
  • 打赏
  • 举报
回复
。。。。。。。。接口必须是顶层的,没有内部接口

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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