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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhuiyi0819 中级黑马   /  2013-4-23 23:16  /  1809 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

判断A、B两段代码有什么区别?
//A
class SuperClass {
public void fun() {
    System.out.println(“SupperClass”);
}
}
class ChildClass1 extends SuperClass {
public void fun() {
    System.out.println(“ChildClass1”);
}
}
class ChildClass2 extends SuperClass {
public void fun() {
    System.out.println(“ChildClass2”);
}
}

//B
class SuperClass {
public void fun() {
    System.out.println(“SuperClass”);
}
}
class ChildClass1 {
public void fun() {
    System.out.println(“ChildClass1”);
}
}
class ChildClass2 {
public void fun() {
    System.out.println(“ChildClass2”);
}
}

评分

参与人数 1黑马币 +6 收起 理由
曹睿翔 + 6 有点小意思,下次来点厉害的

查看全部评分

14 个回复

倒序浏览
B段代码有大量重复内容,A段代码则是抽取出来的共性作为父类 其他子类继承父类并重写父类方法

评分

参与人数 1黑马币 +3 收起 理由
王怀亮 + 3

查看全部评分

回复 使用道具 举报
代码A类之间有继承关系,父类引用可以调用子类的成员,代码B不存在继承关系。

评分

参与人数 1黑马币 +3 收起 理由
王怀亮 + 3

查看全部评分

回复 使用道具 举报
不知道 发的帖的意义,请贴主告诉我深意...
回复 使用道具 举报
一个有继承复写关系的三个类,一个独立的三个类?问这个是什么意思?
回复 使用道具 举报
smile_joe 发表于 2013-4-23 23:52
不知道 发的帖的意义,请贴主告诉我深意...

主要是你太厉害了,哈哈
回复 使用道具 举报
B段代码不具备继承关系,就目前来看虽然和A段代码实现的功能没什么区别,但是它具备以下缺点:
1.代码重用率很低,比如:假设SuperClass 和ChildClass都需要扩展同样的属性或方法时,如果采用B段代码就需要一个个为之添加)
2.偏离了面向对象的设计思想
而A段代码有父子继承关系:
1.提高代码重用率,比如:假设SuperClass 和ChildClass都需要扩展同样的属性或方法时,只要在父类SuperClass 添加,所有子类都会具备父类的属性和方法,前提是父类的modified必须至少是protected的.
2.符合面向对象的设计思想
示例代码:
//A段代码:
class SuperClass
{
        public void fun(){
                System.out.println("SuperClass");
        }
        protected void common(){
                System.out.println("common method");
        }
}
class ChildClass1 extends ChildClass
{
        public void fun(){
                System.out.println(this.common() + "ChildClass");
        }
}

class ChildClass2 extends ChildClass
{
        public void fun(){
                System.out.println(this.common()  + "ChildClass");
        }
}

//B段代码:
class SuperClass
{
        public void fun(){
                System.out.println(super.color + "ChildClass");
        }

        protected void common(){
                System.out.println("common method");
        }
}
class ChildClass1
{
        public void fun(){
                System.out.println(super.color + "ChildClass");
        }

        protected void common(){
                System.out.println("common method");
        }
}
class ChildClass2
{
        public void fun(){
                System.out.println(super.color + "ChildClass");
        }

        protected void common(){
                System.out.println("common method");
        }
}

同样功能B段代码显然比A段代码多,而且代码重用率比较低

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
张昶 中级黑马 2013-4-24 15:32:18
8#
A中使用了继承,B中没有使用继承
回复 使用道具 举报
曹睿翔 发表于 2013-4-24 00:43
主要是你太厉害了,哈哈

大哥,你取笑我啦
回复 使用道具 举报
smile_joe 发表于 2013-4-24 15:35
大哥,你取笑我啦

哪有啊,我都受挫了,有人批我顺民,我很可悲啊,我的犀利哪里去了
回复 使用道具 举报
曹睿翔 发表于 2013-4-24 15:52
哪有啊,我都受挫了,有人批我顺民,我很可悲啊,我的犀利哪里去了

你当爸爸了嘛   --更有爱了
看你头像是这样,如果不对,请不要介意哈
回复 使用道具 举报
smile_joe 发表于 2013-4-24 15:55
你当爸爸了嘛   --更有爱了
看你头像是这样,如果不对,请不要介意哈

没事,尽管误会,我外甥女呢,很开爱
回复 使用道具 举报
曹睿翔 发表于 2013-4-24 15:57
没事,尽管误会,我外甥女呢,很开爱

哈哈 果断好人啊,多多支持,非常感谢:)
回复 使用道具 举报
第一个是有继承关系,第二个没有继承。属于重复工作。写代码的时候,应该考虑的一个重要因素就是代码优化,一段好的程序也应该体现在这方面有体现。Spring 框架的依赖注入和控制反转就为这个而生。
回复 使用道具 举报
第一个有继承,第二个没有继承
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马