package com.pyk.d;
/*1、类的组成:属性,方法,构造器,代码块(普通块,静态块,构造块,同步块),内部类
*2、一个类TestOuter的内部的类SubTest叫内部类,内部类:SubTest 外部类:TestOuter
*3、内部类:成员内部类(静态的、非静态的)和局部内部类(位置:可以在方法内,块内,构造器内)
*4、成员内部类:里面包括属性,方法,构造器等,修饰符可以为:private,default,protect,public final,abstract*/
public class TestOuter {
//非静态的成员内部类
public class D{
int age=20;
String name;
public void method() {
/*5、内部类可以访问外部类的内容
System.out.println(age);
a();*/
int age=30;
//8、内部类和外部类属性重名时如何调用
System.out.println(age);//出现就近原则,访问到30
System.out.println(this.age);//访问到20
System.out.println(TestOuter.this.age);//访问到10
}
}
//静态成员内部类
static class E{
public void method() {
//static修饰的静态内部类只能访问static修饰的内容
/*错误:
System.out.println(age);
a();*/
}
}
//属性
int age=10;
//方法
public void a() {
System.out.println("这是a方法");
//普通块(方法内)
{
System.out.println("这是普通块");
class B{
//内部类(位于块内)
}
}
class A{
//内部类(位于方法内)
}
//7、外部类访问内部类的属性和方法,需要创建内部类的对象,然后进行调用
D d=new D();
System.out.println(d.name);
d.method();
}
//静态块
static{
System.out.println("这是静态块");
}
//构造块(方法外)
{
System.out.println("这是构造块");
}
//构造器
public TestOuter() {
class c {
//内部类(构造器内)
}
}
public TestOuter(int age) {
this.age=age;
}
}
class Demo{
public static void main(String[] args) {
TestOuter to=new TestOuter();
to.a();
//创建内部类的对象
//静态的成员内部类创建E对象
TestOuter.E e=new TestOuter.E();
//非静态的成员内部类D创建对象
//错误:TestOuter.D d=new TestOuter.D();
TestOuter t=new TestOuter();
TestOuter.D d=t.new D();
}
}