1、创建内部类对象
(1)通过外部类的方法返回内部类对象。
(2)通过外部类对象创建内部类对象。
2、内部类属性、方法与外部类同名时调用外部类的属性方法
(1)通过给内部类中传入外部类对象调用外部类属性、方法。
(2)直接用外部类名的方式调用外部类属性、方法。
package test;
public class Out {
private String name;
public void doSomething(){
System.out.println("out");
}
public Out(String name){
this.name = name;
}
public In getIn(){
//传入外部类对象给内部类,以便调用同名属性、方法
return new In(this);
}
public class In{
private String name;
private Out out;
public In(Out out){
this.out = out;
}
public void doSomething(){
System.out.println("in");
}
public String getOutName1() {
Out.this.doSomething();
return Out.this.name;
}
public String getOutName2(){
out.doSomething();
return out.name;
}
public String getOutName3(Out out){
out.doSomething();
return out.name;
}
public String getInName(){
doSomething();
return name;
}
}
public static void main(String[] args) {
/**
* 实例化内部类的2种方法
*/
// 1、通过外部类的方法返回内部类的对象
Out out = new Out("yym");
In in = out.getIn();
// 2、通过外部类对象创建内部类对象
Out out1 = new Out("yym1");
In in1 = out1.new In(out1);
/**
* 内部类属性、方法与外部类同名时,
*/
// 1、将外部类对象传入内部类,通过外部类对象调用。
System.out.println(in.getOutName2()+"\n");
System.out.println(in.getOutName3(out1)+"\n");
// 2、直接用外部类名.this.属性名调用。
System.out.println(in1.getOutName1()+"\n");
}
}