成员内部类demo
/**
* @author:
* @date:2021/12/27
* @description: 成员内部类样例
*/
public class OutClass {
private String name;
public OutClass(String name) {
this.name = name;
}
public class InClass {
private String name;
public InClass(String name) {
this.name = name;
}
}
}
InClass是和OutClass的成员变量是同一个层级的,并且是非静态的。像InClass这样的类,我们就称之为成员内部类。
一、在外部类(如示例代码OutClass中)使用成员内部类(InClass)
@Getter
@Setter
public class OutClass {
private String name;
private InClass inClass;
private InClass inClass2=new InClass("内部类");
public OutClass(String name) {
this.name = name;
this.inClass=new InClass("内部类");
}
@Getter
@Setter
public class InClass {
private String name;
public InClass(String name) {
this.name = name;
}
}
}
在OutClass类中,定义了一个InClass的成员变量,这样的内部类使用方式从编码的形式来说和使用其他类是没有什么差别的。
二、在其他类中使用OutClass的内部类
@Getter
@Setter
public class OutClass {
private String name;
private InClass inClass;
private InClass inClass2=new InClass("内部类");
public OutClass(String name) {
this.name = name;
this.inClass=new InClass("内部类");
}
@Getter
@Setter
public class InClass {
private String name;
public InClass(String name) {
this.name = name;
}
}
public static void main(String[] args) {
OutClass outClass=new OutClass("外部类");
OutClass.InClass inClass=outClass.new InClass("内部类");
}
}
注意:内部类的访问权限,最好不要private
三、内部类中调用外部类的方法或者变量名
@Getter
@Setter
public class OutClass {
private String name;
private InClass inClass;
private InClass inClass2=new InClass("内部类");
//空方法,用来在内部类中调用测试使用。
public void voidMethod(){}
public OutClass(String name) {
this.name = name;
this.inClass=new InClass("内部类");
}
@Getter
@Setter
public class InClass {
private String name;
public InClass(String name) {
this.name = name;
}
public String info(){
//调用外部类的方法:外部类名.this.变量名或方法名
OutClass.this.voidMethod();
StringBuilder sb=new StringBuilder();
//调用外部类的变量:外部类名.this.变量名或方法名
sb.append("外部类的name:"+OutClass.this.name);
sb.append("\n");
sb.append("内部类的name:"+this.name);
return sb.toString();
}
}
public static void main(String[] args) {
OutClass outClass=new OutClass("外部类");
OutClass.InClass inClass=outClass.new InClass("内部类");
System.out.println(inClass);//com.xxxx.Entity.OutClass$InClass@6a5fc7f7
System.out.println(inClass.info());
//外部类的name:外部类
//内部类的name:内部类
}
}
注意:
成员内部类不能有静态变量、方法
因为成员内部类是作为外部类的对象的成员来使用的,所以成员内部类中是不能有静态变量、方法的。