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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© walkonby 中级黑马   /  2013-1-24 09:36  /  1600 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张政 于 2013-1-26 13:29 编辑

老师说A类中想使用B类的东西就必须new一个A类 但是把B作为内部类放在A类里就不用new,这样方便 但是为什么不直接一起写在A类中不要B类呢 而且外部类要访问内部类的时候还要创建内部类的对象 在其他类创建这个内部类的对象更是麻烦 感觉内部类很鸡肋的样子

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

7 个回复

倒序浏览
不一定啊。根据业务需要,可能有时候 一个小功能 需要简单处理一下,又不想影响,其他类功能的统一 性。。。就用内部类,简单处理一下,并且内部类,加载周期还短。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
我个人理解为,这是java的的封装的一种体现,因为内部类中的方法可以直接放问外部类中的成员,包括了private,所以在操作外部类时候更方便,而你所说的其他类调用内部类很麻烦,因为内部类本身定义的就是方便使用外部类的方法,所以其他类调用麻烦一些也是可以理解的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
java是一门纯粹的面向对象语言。而面向对象的三要素为封装,继承,多态。外部类包装内部类有时是有必要的,比如设计模式中的单例模式,工厂模式等等,在一个主要的外部类中包装内部类,以便于把外部类的的种种信息封装起来,然后在外部类中定义一个获取内部类的方法,返回内部类以对对象的操作和使用外问类的成员信息。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
王少雷 发表于 2013-1-24 11:04
不一定啊。根据业务需要,可能有时候 一个小功能 需要简单处理一下,又不想影响,其他类功能的统一 性。。 ...

这样啊 那还有用 临时有用就用一下 用完就仍了  哈哈 感觉用面向对象的思想来描述男女感情的话.......面向对象是残酷的..
回复 使用道具 举报
当描述事物时,事物的内部还有事物,该事物用内部类来描述。
因为内部事务在使用外部事物的内容。

class Body
{
        private class XinZang
        {

        }

        public void show()
        {
                new XinZang().
        }
        
}

毕老师是这样解释的  首先心脏里有很多功能 你把它封装对象最合理 然后可以方便的调用心脏该有的方法和属性  并且心脏是身体内部的器官 它能调用身体其他的器官和东西
所以你不用内部类的话  还得先 new 个 body 这样不优化  所以内部定义 并且心脏不能比人随便看到 得私有

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
txl 中级黑马 2013-1-24 13:12:51
7#
内部类只是为了让阅读代码更方便,其实他还是两个类,在编译的时候你就会发现jvm是创建了两个字节码文件,而调用内部类要创建对象,很正常的,你用其他类的方法也需要创建对象啊但是内部类却可以不用创建对象调用外部类的成员,方便编写代码.还有就是,假入你需要创建一个线程,难道还要去另外创建一个类去继承或实现接口?那样更不便与阅读,这个时候你创建一个匿名内部类会更加方便的不是吗!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
高浩 中级黑马 2013-1-25 13:54:05
8#
类是用来描述事物的,而事物中还可能存在其他事物,也需要进行描述,这时就用到内部类,(例如人和心脏,人是外部类,心脏是外部类)
内部类出现,符合我们现实世界的思想,
它加载周期短
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马