内部类
内部类:在一个类的内部在定义一个完整的类。(套娃dog)
特点:
- 编译之后可生成独立的字节码文件。
- 内部类可直接访问外部类的私有属性,而不破坏封装。
- 可为外部类提供必要的功能组件。
内部类分为:成员内部类、静态内部类、局部内部类和匿名内部类。
成员内部类:在类的内部定义,与实列变量,实例方法同级别的类。
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。
当外部类与内部类属性重名时,优先访问内部类属性。
内部类里面不能包含静态成员,但可以包含静态常量
创建对象方式以及重名时如何调用外部类方式如下:
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); public class Outer { private int id = 110; private String name = "张三"; public void out(){ System.out.println("外部类的方法"); } public class Inner{ private int id = 120; private String name = "李四"; public void in(){ System.out.println("内部类的方法"); } //获得外部类的私有属性 public void getid(){ System.out.println(id); } //当外部内于内部类重名时,优先获取内部类的信息。 public void show(){ System.out.println(name); System.out.println(Outer.this.name);//获取外部类信息。 } } }
静态内部类:不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
Outer.Inner inner = new Outer.Inner();
public class Outer { private String name = "张三"; private int age = 18; //静态内部类和外部类同级 static class Inner{ private String address = "江西";private static int count = 19; public void show(){ //访问外部类属性 Outer outer = new Outer(); System.out.println(outer.name); //调用静态内部类的属性 System.out.println(Inner.count);//Inner可以不加 } } }
局部内部类:定义在外部类的方法之中,作用范围和创建对象范围仅限于当前方法
//局部内部类 public class Outer { private int phone = 1327783241; public void show1(){ //定义局部变量 String name = "桐人"; class Inner{//与方法同级 private String address = "刀剑神域"; public void show2(){ //访问外部类属性 System.out.println(phone); //或者这样访问System.out.println(Outer.this.phone); System.out.println(this.address);//或address //访问局部变量,jdk1.7要求变量必须是常量final,jdk1.8之后final可省略 自动添加 System.out.println(name); } } //创建局部内部类对象 Inner inner = new Inner(); inner.show2();
//然后在main方法中定义Outer的对象 通过对象调用内部类所在的方法就可以啦 } }
匿名内部类:没有类名的局部内部类(一切特征都与局部内部类相同)
必须继承一个父类或者实现一个接口。
//在Usb接口中声明一个service();方法 public class TestUsb { public static void main(String[] args) { //匿名内部类(相当于创建了一个局部内部类) Usb usb = new Usb(){ @Override public void service() { System.out.println("键盘链接成功,开始工作。。。"); } }; usb.service(); } }

浙公网安备 33010602011771号