类的组成:属性、方法、构造器、代码块、内部类
代码块:分为 普通块、静态块、构造块、同步块
内部类:分为 成员内部类(静态的、非静态的) 和 局部内部类(所在位置:方法内、块内、构造器内)
内部类的定义:一个类TestOuter的内部的类SubTest,叫内部类,外部类:相对于内部类,TestOuter就是外部类
成员内部类
里面属性、方法、构造器等(不建议再套一层内部类,虽然也可以)
修饰符:private, default, protect, public, final, abstract
package msb.javase.oop.javase_220226_innerclass_test;
public class Test {
/* 类的组成:属性、方法、构造器、代码块、内部类
* 代码块:分为 普通块、静态块、构造块、同步块
* 内部类:分为 成员内部类 和 局部内部类,局部内部类所在位置:方法内、块内、构造器内
*/
//属性
private int a = 10;
//方法
public void b(){
System.out.println("b");
{
//代码块(普通块)
System.out.println("普通块");
}
class E{
//内部类(局部内部类-方法内)
}
}
//构造器
public Test(){
class E{
//内部类(局部内部类-构造器内)
}
//System.out.println(name);
}
//代码块(构造块)
{
int b;
class F{
//内部类(局部内部类-块内)
}
}
//代码块(静态块)
static {
int c;
}
//内部类(非静态成员内部类)
class InnerClass{
String name;
int a = 20;
public void method(){
int a = 30;
System.out.println(a);//在内部类中可以访问外部类的属性
b();//在内部类中可以访问外部类的方法
//内部类和外部类属性重名的时候,访问外部类属性的方式:OuterClass.this.name
System.out.println(a);//结果为30
System.out.println(this.a);//结果为20
System.out.println(Test.this.a);//结果为10
}
}
//内部类(静态成员内部类)
static class StaticInnerClass{
}
}
class Main{
public static void main(String[] args) {
//创建外部类对象
Test t = new Test();
t.b();
//创建内部类对象
//创建静态成员内部类
Test.StaticInnerClass s = new Test.StaticInnerClass();
//创建非静态成员内部类
Test t2 = new Test(); //必须先创建外部类对象
Test.InnerClass i = t2.new InnerClass(); //通过外部类对象进行创建
i.method();
}
}
局部内部类
TODO