1.什么是成员内部类
定义 : 在成员的位置上定义的一个类,且
没有static
修饰的;
2.成员内部类的特性(关键)
* 1.可以直接访问外部类的所有成员,包含私有的;
* 2.可以添加任意的修饰符,public、private、默认、protected,
* 因为成员内部类的地位就是外部类的一个成员;
* 3.作用域 : 与外部类的其他成员一致,是整个的类体;
* 4.成员内部类 访问 外部类 的属性/方法 : 直接访问即可;
* 5.外部类 访问 成员内部类 : 通过创建对象再访问的方式;
* 6.外部其他类 访问 成员内部类 :
* 方式一 : 通过外部类的对象获取成员内部类对象;
* 方式二 : 通过外部类的方法,获取一个成员内部类的对象。
* 7.外部类 和 成员内部类的 成员重名时,内部类中访问重名的成员,默认遵循就近原则,
* 如果 成员内部类 就是想访问 外部类的重名成员,则使用语法 : 【外部类名.this.成员名称】
*
3.案例代码
3.1 成员内部类的定义代码
各位coder一定要跟着上面的特性来看这一段代码。
package com.northcastle.C_chengyuan_innerClass;
/**
* author : northcastle
* createTime:2022/2/10
*/
public class ChengyuanInnerClass {
//4.一个成员内部类
public class innerClass{
//4.1 成员内部类的属性
private String field01 = "成员内部类的私有属性 field01";
public String field0202 = "成员内部类的共有属性 field0202";
//4.2 成员内部类的构造器
public innerClass() {
}
public innerClass(String field01, String field0202) {
this.field01 = field01;
this.field0202 = field0202;
}
//4.3 成员内部类的方法
public void innerMethod01(){
System.out.println("成员内部类的方法01 : innerMethod01");
}
public void innerMethod02(){
System.out.println("成员内部类的方法02 : innerMethod02,此方法演示调用外部类的成员");
System.out.println("外部类的属性 field01 : "+ChengyuanInnerClass.this.field01);
System.out.println("外部类的属性 field02 : "+field02);
System.out.println("成员内部类调用外部类的方法 method01 : ");
method01(); // 直接调用外部类的方法
}
}
//1.外部类的属性
private String field01 = "外部类的私有属性field01";
public String field02 = "外部类的共有属性field02";
//2.外部类的构造器
public ChengyuanInnerClass() {
}
public ChengyuanInnerClass(String field01, String field02) {
this.field01 = field01;
this.field02 = field02;
}
//3.外部类的方法
//3.1 一个普通的方法
public void method01(){
System.out.println("外部类的方法01 : method01");
}
//3.2 外部类访问成员内部类的方法
public void method02(){
System.out.println("外部类的方法02 : method02,此方法演示使用成员内部类");
//通过创建对象的方式来调用
innerClass innerClass = new innerClass();
System.out.println("成员内部类的属性field01 : "+innerClass.field01);
System.out.println("成员内部类的属性field0202 : "+innerClass.field0202);
innerClass.innerMethod01();
}
//4.外部类定义的一个方法,来返回一个成员内部类的对象,供外部其他类使用
public innerClass getInnerClassInstance(){
return new innerClass();
}
}
3.2 成员内部类的使用代码
package com.northcastle.C_chengyuan_innerClass;
/**
* author : northcastle
* createTime:2022/2/10
*/
public class Application {
public static void main(String[] args) {
//1.演示外部类使用成员内部类
ChengyuanInnerClass chengyuanInnerClass = new ChengyuanInnerClass();
chengyuanInnerClass.method02();
System.out.println("==================================");
//2.演示外部其他类获取 成员内部类的两种方式
//2.1 方式一 : 通过外部类的对象获取一个成员内部类的对象
ChengyuanInnerClass.innerClass innerClass01 = new ChengyuanInnerClass().new innerClass();
//2.2 方式二 : 通过外部类的方法获取一个成员内部类的对象
ChengyuanInnerClass chengyuanInnerClass2 = new ChengyuanInnerClass();
ChengyuanInnerClass.innerClass innerClass02 = chengyuanInnerClass2.getInnerClassInstance();
System.out.println("==================================");
//3.演示成员内部类使用外部类的属性:直接使用上面的成员内部类对象
innerClass01.innerMethod02();
System.out.println("==================================");
}
}
3.3 运行结果
4.完成
Congratulations!
You are one step closer to success!