Java 内部类
什么是内部类?
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
主要用以下几种
成员内部类
局部内部类
匿名内部类
静态内部类
Java 成员内部类示例
访问权限
private 访问权限
protected 访问权限
public 访问权限
package 访问权限
public class TestClass {
public void a()
{
LogHelper.log("我是TestClass 的a()");
InnerClass inner = new InnerClass();
inner.b();
inner.b2();
}
private class InnerClass
{
public void b()
{
LogHelper.log("我是InnerClass 的b()");
}
private void b2()
{
LogHelper.log("我是InnerClass 的b2()");
}
}
public static void main(String[] args)
{
TestClass test = new TestClass();
test.a();
}
}
运行结果为
【www.pangugle.com】- 我是TestClass 的a()
【www.pangugle.com】- 我是InnerClass 的b()
【www.pangugle.com】- 我是InnerClass 的b2()
从上面结果我们看出TestClass 可以调用 InnerClass b() 和 b2()方法,
也就是说InnerClass对于TestClass 来就就像一个孩子一样!
Java 局部内部类示例
局部内部类是定义在一个方法或者一个作用域里面的类,它不能有任何的
private public protected static 等来修饰!
public class TestClass {
public void a()
{
LogHelper.log("我是TestClass 的a()");
class InnerClass
{
public void b()
{
LogHelper.log("我是InnerClass 的b()");
}
private void b2()
{
LogHelper.log("我是InnerClass 的b2()");
}
}
InnerClass inner = new InnerClass();
inner.b();
inner.b2();
}
public static void main(String[] args)
{
TestClass test = new TestClass();
test.a();
}
}
从上面我们可以看到我们把InnerClass 放在了 a() 方法里面, 需要注意的是,如果此时我们想添加
public private 等修饰,编译器会直接报错!
Java 匿名内部类示例
匿名内部类是应用非常广泛的地方,在实际开发工作中,我经常使用此方式来做回调类相关的!
还记得 Java 泛型接口类的使用吗?
// 定义一个回调泛型类
public interface Callback
{
public void execute(T model);
}
public class Test {
public static void main(String[] args)
{
Callback callback = new Callback() {
public void execute(String o) {
LogHelper.log("rs = " + o);
}
};
for(int i = 0; i < 10; i ++)
{
callback.execute(" i = " + i);
}
}
}
Java 静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的就可以直接初始化, 除了这点不同,其它都一样!
public class TestClass {
public static class InnerClass
{
public void b()
{
LogHelper.log("我是InnerClass 的b()");
}
}
public static void main(String[] args)
{
InnerClass inner = new TestClass.InnerClass();
inner.b();
}
}