内部类
定义:
一个java文件可以包含多个class,但是只能有一个Public class,如果一个类定义在另一个类的内部,此时可以被称之为内部类。
使用:
1、创建内部类的时候,跟之前方法不一样,需要在内部类的前面添加外部类进行修饰:
InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass();
2、也可以在外部类中设置一个get内部类的方法,返回一个new内部类
特点
1、内部类可以方便的访问外部类的私有属性(可以直接访问)
2、外部类不能直接访问内部类的私有属性和方法,但可以通过在外部类中的方法new一个内部类对象来访问
例如: public void show() {
System.out.println("show ");
InnerClass inner = new InnerClass();
System.out.println(inner.age);
}
class InnerClass{
private int age;
public void test(){
System.out.println("test");
System.out.println(id);
System.out.println(name);
}
特点补充(注意)
1、内部类中不可以定义静态属性。
2、内部类可以当作类中的一个普通成员变量,只不过此成员变量是class类型。
3、如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,需要使用this关键字(类名.this.属性名)。
4、内部类是可以嵌套的。
语法
[外部类 外部类对象 = new 外部类;
外部类.内部类 内部类对象 = 外部类对象().new 内部类();]
如果主方法在外部类内部,可以省略Outer:Inner inner = out.new Inner();
分类:
匿名内部类:
1、当定义了一个类,实现了某个接口的时候,在使用过程中只需要使用一次,没有其他用途。考虑到代买编写的简洁,可以考虑不创建具体的类而采用new intertacename(){添加未实现的方法}就叫做匿名内部类 ,本质上是new了一个接口的内部实现类,实例对象的同时完成对对象内容的编写
2、编译后文件名为:外部类$数字.class
3、无法使用访问修饰符修饰,包括static abstract
4、可以实现接口或者继承父类
静态内部类:
1、语法:1 (访问外部类的非静态属性)new 外部类类名.内部类().方法名 ;
2 外部类类名.内部类 内部类对象名 = new 外部类类名.内部类类名();
2、定义:在内部类中可以定义静态内部类,使用static 关键字进行修饰
3、只能访问外部类的静态成员,否则需要new一个新对象
4、静态内部类对象实例时,可以不依赖于外部类对象
5、可以通过[外部类.内部类.静态成员]来访问内部类中的静态成员
6、当内部类属性与外部类属性同名时,默认直接调用内部类中的成员
方法内部类(了解):
在外部类的方法中定义类
注意事项:
1、方法内部类不能在外部类的方法以外的地方使用,所以方法内部类不能使用访问控制符和static修饰符(静态成员)
2、方法内部类如果想使用方法的参数,那么参数前必须加上final关键字
3、只用通过调用getObject方法来获取这个方法内部类的对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。