时间:2022-10-26 09:57:35 | 栏目:JAVA代码 | 点击:次
很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了
注:成员内部类中不能写静态属性和方法
//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类 public class Outer { private int id; class Inner { public void in() { System.out.println("这是内部类方法"); } } public void out() { System.out.println("这是外部类方法"); } }
实例化内部类,首先需要实例化外部类,通过外部类去调用内部类
// 代码接上 class Test { public static void main(String[] args) { //实例化成员内部类分两步 //1、实例化外部类 Outer outObject = new Outer(); //2、通过外部类调用内部类 Outer.Inner inObject = outObject.new Inner(); //测试,调用内部类中的方法 inObject.in();//打印:这是内部类方法 } }
分析:
想想如果你要使用一个类中方法或者属性,你就必须要先有该类的一个对象,同理,一个类在另一个类的内部,那么想要使用这个内部类,就必须先要有外部类的一个实例对象,然后在通过该对象去使用内部类。
访问外部类的所有属性(这里的属性包括私有的成员变量,方法)
//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类 public class Outer { private String id = "11923020124"; class Inner { public void in() { System.out.println("这是内部类方法"); } //内部类访问外部类私有的成员变量 public void getId() { System.out.println("id: " + id); } public void useOut() { out(); } } public void out() { System.out.println("这是外部类方法"); } } class Test { public static void main(String[] args) { //实例化成员内部类分两步 //1、实例化外部类 Outer outObject = new Outer(); //2、通过外部类调用内部类 Outer.Inner inObject = outObject.new Inner(); //测试,调用内部类中的方法 inObject.in();//打印:这是内部类方法 inObject.getId(); inObject.useOut(); } }
如果内部类中的变量名和外部类的成员变量名一样,要通过创建外部类对象 "."属性来访问外部类属性,通过this.属性访问内部类成员属性
//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类 public class Outer { private String id = "Outer Id"; class Inner { private String id = "Inner Id"; //这个id跟外部类的属性id名称一样。 public void getInnerId() { System.out.println(id);//输出Inner Id,内部类中的变量会暂时将外部类的成员变量给隐藏 } public void getOuterId() { System.out.println(Outer.this.id);//输出Outer Id,内部类中的变量会暂时将外部类的成员变量给隐藏 } } public void out() { System.out.println("这是外部类方法"); } } class Test { public static void main(String[] args) { //实例化成员内部类分两步 //1、实例化外部类 Outer outObject = new Outer(); //2、通过外部类调用内部类 Outer.Inner inObject = outObject.new Inner(); //测试,调用内部类中的方法 inObject.getInnerId(); inObject.getOuterId(); } }
说明:
如何调用外部类的成员变量呢?通过Outer.this,因为如果想实例化内部类对象,就必须通过外部类对象,当外部类对象new出内部类对象时,会把自己(外部类对象)的引用传到了内部类中,所以内部类就可以通过Outer.this来访问外部类的属性和方法,到这里,你也就可以知道为什么内部类可以访问外部类 的属性和方法,这里由于有两个相同的属性名称,所以需要显示的用Outer.this来调用外部类的属性,平常如果属性名 不重复,那么我们在内部类中调用外部类的属性和方法时,前面就隐式的调用了Outer.this。