内部类的优缺点
内部类的优点:
- 内部类与外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)。
- 内部类是另外一种封装,对外部的其他类隐藏。
- 内部类可以实现java的单继承局限。
内部类的缺点:
结构复杂。
分类
成员内部类、静态内部类、方法内部类、匿名内部类
成员内部类
//成员内部类内部不允许存在任何static变量或方法 正如成员方法中不能有任何静态属性
class Outer {
private String name = "test";
public static int age =20;
class Inner{
public static int num =10;
public void fun()
{
//System.out.println(name);
System.out.println(age);
}
}
}
public class Test{
public static void main(String [] args) {
}
}
方法内部类
定义在方法里的类
对外部完全隐藏,只有这个类的方法可以访问
class Outer{
private int num =5;
public void dispaly(final int temp)
{
//方法内部类即嵌套在方法里面
class Inner{
}
}
}
public class Test{
public static void main(String[] args)
{}
}
静态内部类
class Outer {
public String name = "test";
private static int age =20;
static class Inner{
private String name;
public void fun()
{
System.out.println(name);
System.out.println(age);
}
}
}
public class Test{
public static void main(String [] args)
{
Outer.Inner in = new Outer.Inner();
}
}
匿名内部类
没有名字的方法内部类,特点和方法与方法内部类完全一致
特点:
1.匿名内部类必须继承一个抽象类或者实现一个接口。
2.匿名内部类没有类名,因此没有构造方法。
//匿名内部类
//声明一个接口
interface MyInterface {
//接口中方法没有方法体
void test();
}
class Outer{
private int num = 5;
public void dispaly(int temp)
{
//匿名内部类,匿名的实现了MyInterface接口
//隐藏的class声明
new MyInterface()
{
public void test()
{
System.out.println("匿名实现MyInterface接口");
System.out.println(temp);
}
}.test();
}
}
public class Test{
public static void main(String[] args)
{
Outer out = new Outer();
out.dispaly(3);
}
}