【JavaSE】你真的了解内部类吗?
时间:2024-04-18 19:35:29 来源:网络cs 作者:往北 栏目:社群媒体 阅读:
前言
本篇会详细讲解内部类的四种形式,让你掌握内部类~
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
前言
内部类介绍
实例内部类
定义
调用
静态内部类
定义
调用
匿名内部类
定义和调用1
调用方法2
局部内部类
定义和调用
内部类介绍
在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。(B类定义在A类的内部,称B类为内部类,A类为外部类)内部类也是封装的一种体现。
内部类分为三种
实例内部类、静态内部类、匿名内部类、局部内部类
实例内部类
定义
实例内部类定义在外部类的里面,方法的外面
class OuterClass{ public int data1=1; public int data2=2; public static int data3=3; class InnerClass{ public int data4=4; public int data5=5; public static int data6=6; //内部类的成员方法 public void test(){ System.out.println("InnerClass::test()"); } } public void testA(){ System.out.println("OuterClass::testA()"); }}
调用
实例内部类的实例化
外部类.内部类 内部类引用=外部类引用.new内部类对象。
实例内部类可以理解为是外部类的一个成员,要通过外部类的引用来调用
public static void main(String[] args) { OuterClass outerClass=new OuterClass();//实例化外部类 OuterClass.InnerClass innerClass=outerClass.new InnerClass();//实例化内部类 innerClass.test();//调用内部类中的成员方法 }
实例内部类的方法可以调用自己的成员变量及外部类的成员变量
//内部类的成员方法 public void test(){ System.out.println("InnerClass::test()"); System.out.println(data4); System.out.println(data5); System.out.println(data6); System.out.println("###########"); System.out.println(data1); System.out.println(data2); System.out.println(data3); }
调用test方法 结果如图
当内部类和外部类有相同的成员变量时,首先会访问内部类中的成员
此时,若就想访问外部类的成员变量,可以使用 外部类.this.成员变量 即可访问
静态内部类
定义
静态内部类定义在 外部类的里面,方法的外面,并且用static修饰。
生成内部类引用不需要外部类引用的调用
class OuterClass{ public int data1=1; public int data2=2; public static int data3=3; //静态内部类,外部类的里面,方法的外面,并且用static修饰 static class InnerClass{ public int data4=4; public int data5=5; public static int data6=6; //内部类的成员方法 public void test(){ System.out.println("InnerClass::test()"); } } public void testA(){ System.out.println("OuterClass::testA()"); }
调用
静态内部类的实例化
OuterClass.InnerClass innerClass=new OuterClass.InnerClass(); innerClass.test();
调用外部类的成员变量,通过直接在静态内部类的成员方法中 实例化一个外部类对象,通过对象直接调用外部类的成员变量
//静态内部类的成员方法 public void test(){ System.out.println("InnerClass::test()"); OuterClass outerClass=new OuterClass(); System.out.println(data4); System.out.println(data5); System.out.println(data6); System.out.println("###########"); System.out.println(outerClass.data1); System.out.println(data3); }
结果
内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件。
匿名内部类
定义和调用1
相当于一个类实现了这个接口,同时重写了test方法
//接口interface ITestable{ void test();}public class Test4 { public static void main(String[] args) {//匿名内部类 new ITestable(){ @Override//重写了接口的方法 public void test() { System.out.println("test("); } }.test();//调用test方法 直接在后面.test方法 }}
调用方法2
通过引用对象it调用test方法
ITestable it =new ITestable() { @Override public void test() { System.out.println("test()"); } }; it.test();
局部内部类
定义和调用
定义在外部类的方法中的类。
class OuterClass{ public int data1=1; public void testA(){ //局部内部类 定义在方法里面 只能在当前方法中使用 class InnerClass { public int data1=100; public static int data2=2; public void test(){ System.out.println("InnerClass::test"); } }//局部内部类 只能在当前方法testA中使用 InnerClass innerClass=new InnerClass(); innerClass.test(); } }
注意:
局部内部类只能在所定义的方法体内部使用不能被public、static等修饰符修饰编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class几乎不会使用本文链接:https://www.kjpai.cn/news/2024-04-18/160154.html,文章来源:网络cs,作者:往北,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:单调栈(C/C++)
下一篇:返回列表