首页 > 编程知识 正文

java内部类使用外部类属性,java内部类怎么使用外部类属性

时间:2023-05-04 19:26:45 阅读:11459 作者:187

对于普通类(没有内部类的类)来说,内部类和外部类都与他无关。 对于有内部类的类来说,它们是其内部类的外部类,外部类是相对的说法,其实是有内部类的类。 因此,要回答这个问题,必须说明什么是内部类。 Java的内部类是静态内部类静态内部类(alsocallednestedclass )成员内部类memberinnerclass本地内部类localinnerclass匿名内部类anononoss

在定义类时添加静态关键字。 不能与外部类具有相同的名称。 编译成完全独立的东西。 类文件。 名为OuterClass$InnerClass。 类的形状。 只能访问外部类的静态成员和静态方法,包括专用静态成员和方法。 生成静态内部类对象的方法是OuterClass。

InnerClassinner=newOuterClass。 InnerClass (; 代码示例: packagecom。 learnjava。 innerclass; classtaticinner {私有状态} taticinta=4; //静态内部类publicstaticclassinner (公共语音测试) /静态内部类可以访问外部类的静态成员//,并且只能访问静态系统。

出局。 println(a; }公共clas { staticinnerclasstest { publicstaticvoidmain (string [ ] args ) staticinner。 Innerinner=newStaticInner。

Inner (; inner。 test (; }成员内部类MemberInnerClass成员内部类也在其他类中定义,但没有静态限定。 可以将成员内部类和静态内部类比较为非静态成员变量和静态成员变量。 成员内部类就像一个实例变量。

无论是静态还是非静态,都可以访问外部类的所有成员变量和方法。 在外部类中创建成员内部类的实例: this。 新inner class (; 在外部类之外创建内部类的实例。 (newOuterclass () ) 新inner class (; 在内部类中访问外部类的成员: Outerclass。

this 成员示例代码: packagecom。 learnjava。 innerclass; classMemberInner{privateintd=1; 私有Inta=2; //成员内部类public class inner2{私有inta=8; publicvoiddoSomething () /直接访问外部类对象系统。

出局。 打印ln (d; 系统。 出局。 println(a; 直接访问//A时,访问的是如何访问内部类的a//外部类的a? 系统。 出局。 成员inner (println )。 this a ); } } publicclassmemberinnerclasstest { publicstaticvoidmain (string [ ] args (//创建成员内部类的对象(/外部类的实例member iid )

Inner2inner=newMemberInner ()。 newInner2(; inner。 doSomething (; }局部内部类LocalInnerClass局部内部类是在方法中定义的,它小于方法的范围。 是内部类中使用最多的类型。 不能像局部变量那样用public、protected、private或static限定。

只能访问方法中定义的final类型的局部变量。 本地类是在方法中定义的,因此只能在方法中使用。 也就是说,只能在方法中生成本地内部类的实例并调用该方法。 代码示例: packagecom。 learnjava。 innerclass; classLocalInner{inta=1; 公共void do something () {intb=2; finalintc=3; //定义本地内部类classInner3{publicvoidtest () {System。

出局。 打印机(hello world ); 系统。 出局。 println(a; 访问非final局部变量//error : cannotrefertoanon-finalvariablebinsideaninner//classdefinedinadifferentmethod//系统

出局。 打印ln (b; 可以访问final变量System。 出局。 打印机(c; }//创建本地内部类的实例,并调用方法newInner3(。 test (; } publicclasslocalinnerclasstest { publicstaticvoidmain (string [ ] args (//外部类对象LocalInnerinner=newLocalInner ) ); //调用外部类的方法inner。

doSomething (; }匿名内部类AnonymousInnerClass匿名内部类是未命名的本地内部类,不使用关键字class、extends和implements,也没有构建方法。 匿名内部类隐式继承了父类或实现了接口。

匿名内部类使用得很多,通常用作方法参数。 生成的。 在class文件中,匿名类生成OuterClass$1。 class文件,数字根据是第几个匿名类类推。 代码示例: packagecom。 learnjava。 innerclass; 导入Java。

util。 日期; publicclassanonymouseinnerclass { @ suppress warnings (deprecation ) publicstringgetdate ) {返回日期。 tolocalestring (} publicstaticvoidmain (string [ ] args ) anonymouseinnerclasstest=newanonymouseinnerclass ); //打印日期: Stringstr=test。

获取日期(新日期); 系统。 出局。 println(str; 系统。 出局。 println------------; //使用匿名内部类Stringstr2=test。 获取(新日期) }; 使用//大括号,但不包含内容,生成的对象System继承了Date类的子类,该子类的执行结果与上面的完全匹配。

出局。 println(str2; 系统。 出局。 println------------; //使用匿名内部类重写父类的方法Stringstr3=test。 getdate(newdate ) ) (/重写父类的方法@ override @ deprecatedpublicstringtolocalestring ) {returnHello: super。

toLocaleString ((); 系统。 出局。 println(str3; ()。

一切都是

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。