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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-4 20:12  /  2209 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-5 10:34 编辑

这么定义标题好像有些不太好,但没想到好标题,就先这么写吧。我的问题如下:
对于具有相同特性或者公有方法的部分是可以抽取出来,放在一个类中的,这样提高代码的复用性。
那么继承是子类继承父类,也可以说是在“享受”父类中的成员,而一个内部类同样可以将含有共同成员的代码抽取出来,定义一个类。
这两者有什么本质区别呢?
比如下面两段代码:

在这里,P都是提取出来的公有方法,那么这两者有什么不同的呢?


傲游截图20130204202541.png (23.78 KB, 下载次数: 37)

傲游截图20130204202541.png

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

6 个回复

倒序浏览
可以在类中定义另外一个类,这些类被称为内部类。从本质上讲,内部类与其他类相同,只是内部类在其他类的内部定义
在方法之外定义的内部类属于该类,具有类范围(类似于成员变量)。而在外部类的任何方法中都可以创建该内部类的实例。内部类还可以在方法内部定义,在方法内部定义的内部类属于该方法,具有局部(方法)范围(类似于局部变量)。该方法可以创建该内部类的实例,但是外部类的其他方法无法访问该内部类。 在方法内部定义的内部类具有一些限制:  它们不能用访问修饰符进行声明;  它们不能被声明为静态类型;  具有局部范围的内部类只能访问所嵌入方法中声明为final的变量,引用方法的局部变量或作为传递给所嵌入方法的参数
继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
内部类和继承都有个特点就是代码共享,但继承和内部类是两个完全不同的概念!继承之间的关系是is-a 的关系,而内部类与类的关系是寄生关系.
内部类没继承实用,继承子类不用写父类所有方法和变量构造函数,父类还能被多个类继承。



回复 使用道具 举报
题目虽然有缺漏, 但是还是说说继承吧。

继承的特征:
  提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。  
继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。这是继承降低程序的耦合性。继承也为多态提供了先觉条件。

内部类虽然可以抽取共性方法。 但是只能供自己本类使用。

要说提高代码的复用性,继承可以多重继承,可以被其他类继承使用。

回复 使用道具 举报
李洪因 发表于 2013-2-4 20:36
可以在类中定义另外一个类,这些类被称为内部类。从本质上讲,内部类与其他类相同,只是内部类在其他类的内 ...

内部类那看得有点晕,但是这两者的特点有些明白了。谢谢
回复 使用道具 举报
王勇文 发表于 2013-2-4 20:37
题目虽然有缺漏, 但是还是说说继承吧。

继承的特征:

基本理解了继承更实用些,似乎是比内部类更好。感谢。
回复 使用道具 举报
为什么继承?继承带给我们的好处?
        代码重用
        LSP里氏替换原则、多态。(程序的可扩展性、灵活性)方法重写override。虚方法的原理:虚方发表。

对于写在类类部的内,我就不说了,不提倡这样写
回复 使用道具 举报
内部类不一定继承,内部类可以认为是外部类内部的一些东西,声明在外部类里边,就如毕老师所说的人和心脏的关系
而匿名内部类必须继承父类或者实现接口,因为它不存在内部类的名字,需要靠父类名字运用多态来实现,或者是直接调用其父类或者接口的方法
所以匿名内部类必须得有父类或者被实现的接口,否则无法建立匿名内部类的对象

总之 内部类与继承没有必然的联系, 然而匿名内部类必然需要继承一个父类或者实现接口 以便于该类的对象建立


浅见 望指正
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马