整理了长风老师在Day11的静态内部类章节的随堂代码
静态成员内部类
package com.cskaoyan.javase.oop3.innerclazz6.static3.basic2;
/**
* @description: 静态内部类的访问特点
* @author: 长风老师
**/
/**
* 类加载、权限、创建对象
* 【1.】静态内部类什么时候类加载?
* 类加载互相不影响
* 【2.】静态内部类类加载需不需要依赖外围类?
* 不会依赖
* 【3.】不受访问权限的限制,可以互相访问私有
* 【4.】它们之间创建对象互不依赖:
* 内部类的成员方法中,有没有外围类对象? 没有
* 外围类的成员方法中,有没有内部类对象? 没有
*
* 静态内部类访问
* 【1.】访问外围类
* 需要创建对象
* 不受访问权限限制
* 其它的和普通类访问一样
* 【2.】被外围类访问
* 外围类创建对象
* 不受访问权限限制
* 其它的和普通类访问一样
* 【3.】访问外部类
* 直接创建外部类对象
* 受访问权限限制
*
* 外部类访问(了解)
* 1.访问静态内部类
* 创建静态内部类对象,访问成员,受访问权限限制
*/
public class Demo {
int a;
private int b;
public static void main(String[] args) {
//创建内部类对象
EnclosedClazz.Inner inner = new EnclosedClazz.Inner();
//注意跟成员内部类的链式调用区分
//这里:外围类名.静态内部类名 对象名 = new 外围类名.静态内部类名();
//成员内部类:两个new
System.out.println(inner.a);//外部类访问静态内部类成员//10
inner.test();//调用内部类test,test中访问外围类成员
}
}
class EnclosedClazz {
int a = 100;
private int b = 200;
static int c = 300;
static final int D = 400;
public void testMember() {//外围类成员方法
//创建对象
Inner inner = new Inner();
}
public static void testStatic() {
//创建对象
Inner inner = new Inner();
}
static class Inner {
int a = 10;
private int b = 20;
static int c = 30;
static final int D = 40;
public void test() {
//创建外围类对象
EnclosedClazz ec = new EnclosedClazz();
//外围类对象直接访问自己成员
System.out.println(ec.a);
System.out.println(ec.b);
System.out.println(EnclosedClazz.c);//类名访问静态成员
System.out.println(EnclosedClazz.D);
System.out.println("xxx" + this.a);//当前静态内部类成员
Demo d = new Demo();
System.out.println(d.a);//0
}
public static void testStatic() {
//访问外围类成员,创建外围类对象
//访问内部类成员,创建内部类对象
}
}
}
class A{
class Inner{}
}