Java的内部类——你知道多少?

发表于:2011-1-05 11:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:青竹少年    来源:51Testing软件测试网采编

#
java
#
JAVA
#
Java

  我在写这篇文章之前,我对Java内部类也不是很清楚,只知道简单的应用。前几天有个朋友问我怎么理解Java内部类,我当时就有点傻了,想了半天也没有说出来,我想,如果让大家来回答这个问题,大家该怎么回答呢?我估计,总有一些人回答不上来的,或者说回答的不够完整。我特意查了查,自己又总结了总结,在这给大家分享一下。 在说之前,我先列出几个问题:

  1.外部类(非主类)通过怎样的方式访问内部类?

  2.内部类能不能访问主类私有的属性,为什么?

  3.内部类能不能继承别的类和接口?

  4.内部类能不能是static的?

  5.在主类的方法里面可不可以定义内部类?

  6.初始化主类的时候是不是也把内部类给初始化了?为什么?

  7.怎样写一个匿名的内部类?

  我目前想到的就这些,在我给大家陈述之前,希望大家好好想想,再往下看:

  第一个问题:外部类是怎样引用内部类的?这个问题,我想,可能有的人就会这样写:

  这是内部类:InnerClass.

 1publicclassMainClass {
2   
3   publicclassInnerClass{
4       publicString name="name";
5
6       publicString getName() {
7           returnname;
8        }
9
10       publicvoidsetName(String name) {
11           this.name=name;
12        }
13    }
14}

  以下是引用:

1publicclassCheckClass {
2   publicstaticvoidmain(String[] args) {
3        InnerClass innerClass=newInnerClass();
4        System.out.println(innerClass.getName());
5    }
6}

  如果这样写的话,会报编译错误。那么为什么会报错呢?因为在Java的设计中,如果想访问一个类的内部类,你必须通过宿主类去取它,然后,再对它进行操作,Java就是想这样把内部类给封闭起来的,好吧,正确的写法,我给大家贴出来:

  以下是内部类的写法:

 1publicclassMainClass {
2   publicInnerClass getInnerClass() {
3       returnnewInnerClass();
4    }
5
6   publicclassInnerClass {
7       publicString name="name";
8
9       publicString getName() {
10           returnname;
11        }
12
13       publicvoidsetName(String name) {
14           this.name=name;
15        }
16    }
17}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号