既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
//定义成员内部类 class BB{ public void play(){ System.out.println("n1=" + n1 + " name=" + name); } } //第二种: //定义一个外部成员方法tetu(),返回值为 内部类对象类型 public BB retu(){ return new BB(); //返回 内部类的new BB() 对象 }
}
二、静态内部类 ☞♥☜
Ⅰ基本介绍 ☛♡☚
1、什么是静态内部类
静态类部类是定义在外部类的成员位置,与成员内部类相似。但是静态内部类有static 关键字修饰,并且静态内部类只能访问外部类的静态成员。
2、静态内部类与成员类部类的区别
生成(new)一个静态内部类不需要外部类成员,静态内部类的对象可以直接生成,如:
Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成,并且可以定义私有静态内部类。
Ⅱ使用细节 ☛♡☚
1、可以直接访问外部类的所有静态成员,包含私有,但是不能直接访问非静态成员。
2、可以添加任意访问修饰符(public、protected、默认、private),因为成员内部类就相当于一个成员。和成员内部类一样。
3、静态内部类能定义静态成员,也能定义普通成员或非静态成员。
4、当静态内部类和外部类有同名的成员时,静态内部类可通过 外部类名.变量名 访问外部类成员。
Ⅲ代码实例演示 ☛♡☚
㈠ 其他外部类的第一种访问方式
package com.Locally; public class static_inner { public static void main(String[] args) { //new 一个外部类Outer01 对象 Outer01 outer01 = new Outer01(); //外部类的第一种访问方式:直接访问静态内部类成员 Outer01.Inner01 inner01 = new Outer01.Inner01(); //解析: //Outer01.Inner01可以理解为创建外部类对象Outer01的内部类对象Inner01 //Outer01.Inner01() 因为是静态的,所以直接访问 //通过对象名,直接调用静态内部类成员 inner01.cc(); } } class Outer01{ private static int n3 = 10; public void cpy(){ System.out.println("这是cpy()方法"); } //定义静态内部类 static class Inner01{ private int n2 = 33; public void cc(){ System.out.println("n3=" + n3); //不能访问cpy(),因为它是普通成员,没有static 关键字修饰 } } }
㈡ 其他外部类的第二种访问方式
package com.Locally; public class static_inner { public static void main(String[] args) { //定义外部类对象 Outer01 outer01 = new Outer01(); //其他外部类的第二种访问方式: //创建一个方法访问 Outer01.Inner01 inner011 = outer01.n(); //解析: //Outer01.Inner01 同上 //outer01.n() 等价于 new Outer01.Inner01() //通过对象名直接访问静态内部类的成员 inner011.cc(); } } class Outer01{ private static int n3 = 10; public void cpy(){ System.out.println("这是cpy()方法"); } //定义静态内部类 static class Inner01{ private int n2 = 33; public void cc(){ System.out.println("n3=" + n3); } } //创建的方法 //定义一个方法,返回值类型为 静态内部类对象 public Inner01 n(){ return new Inner01(); //返回 new了的静态内部类对象 } }
三、局部内部类 ☞♥☜
Ⅰ基本介绍 ☛♡☚
**什么是局部内部类:**定义在一个类的成员方法或代码块中的类叫局部内部类。
代码解释:
class Outer{//外部类 private int n1; //外部类属性 public void m2(){} //外部类方法 //外部类方法 public void m1(){ //方法中 //局部内部类 final class Inner{ //类名 private int n1; //局部内部类属性 public void f1(){ //局部内部类方法} } } }
Ⅱ使用细节 ☛♡☚
1、局部内部类是定义在外部类的局部位置,通常在方法
2、可以直接访问外部类的所有成员,包含私有的
3、不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能其他使用修饰符的,但是可以使用 final 修饰。
4、作用域 : 仅仅在定义它的方法或代码块中
5、 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名去访问
6、外部类名.this 的本质就是外部类的对象
Ⅲ代码实例演示 ☛♡☚
package com.Locally; public class locally { public static void main(String[] args) { //new 一个外部类对象 Outer outer = new Outer(); outer.m1(); } } class Outer{ private int n1 = 100; public void m2(){ System.out.println("Outer m2()"); } public void m1(){ //局部内部类 final class Inner{ private int n1 = 800; public void f1(){ // Outer02.this 本质就是外部类的对象,使用 外部类名.this.成员 去访问 System.out.println("n1= " + n1 + " Outer.this.n1=" + Outer.this.n1); 调用外部类的m2()方法 m2(); } } //new 一个局部内部类对象 Inner inner = new Inner(); //调用局部内部类的方法 inner.f1(); } }
四、匿名内部类 ☞♥☜
Ⅰ基本介绍 ☛♡☚
什么是匿名内部类:
匿名内部类,其实就是匿名的子类而已,只不过它隐藏在.class文件里面你看不到,所以叫匿名内部类!
注意:
匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的的特征。
Ⅱ使用细节 ☛♡☚
1、可以直接访问外部类的所有成员,包含私有的
2、不能添加访问修饰符,因为它的地位就是一个局部变量
3、作用域 : 仅仅在定义它的方法或代码块中
4、如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名去访问
Ⅲ代码实例演示 ☛♡☚
package com.Locally; public class Anonymous { public static void main(String[] args) { //new 一个Cellphone的对象 Cellphone cellphone = new Cellphone(); //匿名内部类 cellphone.alarmclock(new Bell(){ @Override public void ring() { System.out.println("System.out.println(\"懒猪起床了.....\");"); } }); } } //接口 interface Bell{ void ring(); } //定义一个类 class Cellphone{ public void alarmclock(Bell bell){//传一个接口类的参数 bell.ring();//动态绑定 } }
匿名内部类:
cellphone.alarmclock(new Bell(){ @Override public void ring() { System.out.println("System.out.println(\"懒猪起床了.....\");"); } });
解析匿名内部类,可以把它分成两个部分:
①先new一个Bell() 对象,同时实体化(就是在{大括号中写属性或方法}),
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
} });
**解析匿名内部类,可以把它分成两个部分:** ①先new一个Bell() 对象,同时实体化(就是在{大括号中写属性或方法}),
[外链图片转存中…(img-XF89ILAR-1715892272813)]
[外链图片转存中…(img-yCscMJJg-1715892272813)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新