A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹晓涵 中级黑马   /  2012-5-30 22:45  /  1669 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为何要使用内部类,匿名内部类是否可以继承其他类或者实现接口,成员内部类中式否可以定义静态成员,静态成员在哪些情况下可以定义。

6 个回复

倒序浏览
内部类可以继承接口,并且无论外部类是否有继承其他接口,这也算是使用内部类的原因。内部类可以定义静态成员,只要内部类不是在方法中。
回复 使用道具 举报
     定义内部是为了有更好的编码结构
     给你举一个例子:
   内部类,就好比是人的心脏,我们不会把我们的心脏暴露到外面吧,可以通过  private(内部类在成员位置上,可以通过private修饰)将内部私有,  然后可以通过特定的函数来访问到我们私有的 内部类
   你要建立匿名内部类的首要条件就是,必须是继承或者实现接口
   
回复 使用道具 举报
如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。这时,为了方便设计和访问,直接将A类定义在B类中。就可以了。A类就称为内部类。内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
当内部类定义在外部类中的成员位置上,可以使用一些成员修饰符修饰 private、static。
如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。如果内部类中定义了静态成员,那么该内部类必须是静态的。
匿名内部类:没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。

匿名内部类的格式:new 父类名&接口名(){ 定义子类成员或者覆盖父类方法 }.方法。
回复 使用道具 举报
定义内部类是为了更形象的表示 类与类的关系,也可以使访问更加方便。比如人体和心脏  ,人可以是一个类  心脏也可以是一个类。如果分开定义不够形象,访问也麻烦。
匿名内部类 本来就是建立在 一个局部内部类继承另一个类的情况下而使用的。如果还要继承其他类的话,个人认为是不行的
成员内部类当然可以定义为静态,且如果成员内部类有静态成员 必须定义为静态,在静态方法里面也只能访问静态内部类。所以如果你的类不是静态内部类的话,就不能定义静态成员。
回复 使用道具 举报
本帖最后由 张亮 于 2012-5-31 21:43 编辑

这个内部类只为外部类服务,别的类不会用到。

匿名内部类,连类名都没有还怎么继承其他类或者实现接口。


成员内部类可以定义静态成员。

静态变量何时使用:在对象之间共享值时 ,方便访问变量时
静态方法何时使用:为了方法调用起来比较方便时使用
回复 使用道具 举报
徐炯 中级黑马 2012-5-31 22:30:20
7#
1,先回答为何使用内部类.
我们在编码的时候,为了描述一个对象,往往要借助其它对象(比如说,描述一个人的身份,他在学校是学生,在家是孩子,有父母)这时定义一个类是不够的,定义多个类又觉得不恰当(主次不分),就把其他的类放在这个类中当作属性使用(定义一个Person类,把Student类和Child类也定义在Person类的state方法里),其它的类就叫做这个类的内部类。

2,匿名内部类是否可以继承其他类或者实现接口??
可以。匿名内部类首先是个类,是类就可以可以继承其他类或者实现接口。但是内部类的访问机制和其他类是不一样的,他必须通过外部类进行访问。

3,成员内部类中式否可以定义静态成员??
可以。但内部类中定义了静态成员时,这个内部类也必须用static修饰。具体原因,你看下这个帖子:
http://bbs.itheima.com/forum.php?mod=viewthread&tid=15603

4,静态成员在哪些情况下可以定义??
首先你得先理解下静态的意义。static变量就是类变量,static方法就是共享方法。凡是被static修饰的类,方法,变量都存储在方法区里(方法区是内存中专门存放共享数据的地方),他们随着类的加载而加载,优先于对象建立。所以,当你觉得类中的某个成员是需要共享的,而且不需要实例化就应当存在的,可以定义静态成员。

希望能帮到你!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马