啥是内部类????
内部类就是在一个类内部的类 这样:
class Outer{
private String str ="外部类中的字符串";
//定义一个内部类
class Inner{
private String inStr= "内部类中的字符串";
//内部类方法
public void print(){
//调用的是外部类的str
System.out.println(str);
}
}
//外部类方法
public void fun(){
//内部类对象
Inner in = new Inner();
//内部类对象提供的print
in.print();
}
}
public class Test{
public static void main(String[] args)
{
//创建外部类对象
Outer out = new Outer();
//外部类方法
out.fun();
}
内部类的好处:
内部类与外部类之间可以互相访问双方的私有域 包括方法 属性等
内部类对外部的其他类是隐藏的
在外部创建内部类实例对象:
非静态内部类:
Outer.Inner inner=new Outer().new Inner();
静态内部类:
Outer.Inner inner=new Outer.Inner();
在外部类内部创建:
Inner inner=new Inner();
内部类分类:
成员内部类 静态内部类 方法内部类 匿名内部类
成员内部类:就是类似于成员变量 类本身不允许static关键字进行修饰 内部也不能存在static关键字进行修饰的方法和变量
静态内部类:关键字static修饰的类就是静态内部类 静态内部类不依赖外部类创建 可以直接进行创建 静态内部类不能使用外部类的非静态方法和成员变量
方法内部类 :定义在方法内部 对外部完全隐藏 除了创建他的方法可以进行访问之外 谁都不能进访问 方法内部类要访问方法的参数就要将方法的参数申明为final
匿名内部类:匿名内部类必须继承抽象类或者是实现一个接口 匿名内部类没有构造方法 隐藏class申明
interface MyInterface {
//接口中方法没有方法体
void test();
}
class Outer{
private int num = 5;
public void dispaly(int temp)
{
//匿名内部类,匿名的实现了MyInterface接口
//隐藏的class声明
new MyInterface()
{
//实现test方法
public void test()
{
System.out.println("匿名实现MyInterface接口");
System.out.println(temp);
}
}.test();
}
}