点击上方蓝色文字,加关注,获取更多
哈喽今天为大家带来了一些内部类的干货,收下吧。
老套路,先答题,今天的题,后面有解析哈
59行是C c = new C()这句,小哥忘了标记了
19年去东南大学参加比赛,突然想发出来,留恋一下,也路过了南航
干货来了:成员内部类
(一)由内部类中访问外部类:
1.若内部类中的属性名字和外部类中的属性名字相同,则优先打印内部类的属性
2.若内部类中的属性名字和外部类中的属性名字不同,若打印外部类属性名则是外部类的属性,打印内部类的属性名称,则为内部类属性名称。
总之:从内部类中访问外部类的属性,外部类类名.this.外部类属性名,从内部类中访问外部类的属性,this.内部类属性名。
class A{
int outAge=31;
int age=21;
class B{
int age=20;
int innerAge=30;
public void testB() {
System.out.println("这是外部类的outAge"+outAge);
System.out.println("这是外部类的age"+A.this.age);
System.out.println("这是内部类的innerAge"+this.age);
System.out.println("这是内部类的age"+age);
}
}
主方法:
A a = new A();
A.B b=a.new B();
b.testB();
对于成员内部类的等价形式:代码如下:实际上就是继承
class A{
int age=20;
}
class B extends A{
A a;
void setA(A a) {
this.a=a;
}
public void test() {
System.out.println(this.age);
}
}
主方法:
A a = new B();
B b = new B();
b.setA(a);
b.test();
(二):静态内部类
class A{
int outAge=31;
int age=21;
static class B{
int age=20;
static int innerAge=30;
public void testB() {
System.out.println(innerAge);
System.out.println(age);
}
}
}
主方法:
A.B b = new A.B();
讲解:
1.不管成员内部类还是静态内部类,都不能直接在外部类中去访问内部类中的属性
2.内部类和外部类只有单向关系,没有双向关系
3.在静态内部类中,只可以直接访问外部类的类成员
4.只要是内部类,编译都会生成两个.class 文件
5.主方法中不需要外部类的实例。
(三)匿名内部类:
class A{
int a=0;
void testA(){
//此处经历了向上转型
C c = new C(){
int d=30;
void testD(){
System.out.println("D------");
}
};
}
}
class C{
int c=20;
}
以上代码的等价形式为:
class A{
int a=0;
void test(){
C c = new C1();
}
class C1 extends C{
int d=30;
void testD(){
System.out.println("==============");
}
}
}
class C{
int c=20;
}
伴随着向上转型的过程
细分为:匿名成员内部类和匿名静态内部类
匿名成员内部类具有成员内部类的所有特点
匿名静态内部类具有静态内部类的所有特点
小编今天有花了一下午时间更深入的总结了一下内部类,真的是花了好长好长好长时间,又是一个不眠之夜啊,下面来听一下今天的解析吧
兄弟们,动一动小手,右下方点赞点在看