您的位置:首页 > 编程语言 > Java开发

我是菜鸟:Java中接口/内部类中容易忽略的问题总结

2015-07-22 22:02 246 查看

接口

接口可以继承

interface A{…}

interface C{…}

interface B extends A{…}

interface D extends A,C{…}

可以看出不仅接口可以继承,而且还支持多继承,这对于类来说是不行的。

接口中的域

放入接口中的域自动static final 类型,且这些域不能是空的,但是可以被非常量表达式初始化化。

接口可以嵌套

接口可以嵌套在 中和其他接口中。

定义在类中的接口,可以为public, private 和包访问权限。(一般的接口的权限为:包访问权限和public. Thinking: 为什么不能为private? java中类的属性可以为private, protected 吗? private定义一个类,只能自己访问,别的类不能调用,这样是没有意义的,所以除了内部类,其他不能用private修饰。)

接口可以嵌套,但是嵌套的接口必须遵循接口元素必须为public的属性。在实现某个嵌套接口的时候,不需要实现嵌套在内部的任何接口。

interface A{

interface B{ void f(); }

void g( );

}

public class C implements A{

public void g(){…}

}

内部类

将一些逻辑相关的类组织在一起,并控制位于内部类的可视性。

内部类的好处:每个内部类都能独立的继承一个实现,无论外围类是否已经继承了某个实现,对于内部类都没得影响。(解决了多继承问题)

在内部类中生成外部类的引用(outclass.this)和直接创建内部类(outer.new InnerClass)

public class OuterClass {
public class InnerClass{
public OuterClass fun(){
return OuterClass.this;  //如果是静态内部类,则不能使用this
}
}

public static void main(String...args){
OuterClass ic = new OuterClass();
OuterClass.InnerClass icA = ic.new InnerClass(); //对于非静态内部类,必须先拥有外部内的对象。
}
}


局部内部类

普通的内部类对象隐式的保存了一个指向它外围类的对象。但是对于static内部类,就不这样了。

这意味着:

1.创建嵌套类的对象,并不需要外围类的对象;

2. 不能从静态内部类中的对象访问非静态的外围类对象。

3. 普通内部类中不能有static数据和static字段,也不能包含嵌套内(静态内部类)(原因?)

匿名内部类

一个方法返回值的生成和与表示这个返回值类的定义结合在一起。

如果定义一个局部内部类,并且希望使用在一个外部定义的对象,那么这个参数必须是final的。而如果参数仅仅是用作传递给基类的构造器,那么不必要求为final的。

在匿名内部类中,不可能有命名的构造器,但是可以通过实例初始化,达到构造器的效果。

接口和内部类的结合

嵌套类(静态内部类)可以作为接口的一部分

package com.kun.innerclass;

interface myInterface {
class InterfaceInner{
String str = "Helllo";

}
class InterfaceTest2 implements myInterface{

@Override
public void fun() {
// TODO Auto-generated method stub

}

}
void fun();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  接口-内部类