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