黑马程序员技术交流社区

标题: 判断以下两段代码有什么区别 [打印本页]

作者: zhuiyi0819    时间: 2013-4-23 23:16
标题: 判断以下两段代码有什么区别
判断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”);
}
}

作者: 尹丽峰    时间: 2013-4-23 23:24
B段代码有大量重复内容,A段代码则是抽取出来的共性作为父类 其他子类继承父类并重写父类方法
作者: wangyougu010    时间: 2013-4-23 23:50
代码A类之间有继承关系,父类引用可以调用子类的成员,代码B不存在继承关系。
作者: smile_joe    时间: 2013-4-23 23:52
不知道 发的帖的意义,请贴主告诉我深意...
作者: HM许涛    时间: 2013-4-24 00:05
一个有继承复写关系的三个类,一个独立的三个类?问这个是什么意思?
作者: 曹睿翔    时间: 2013-4-24 00:43
smile_joe 发表于 2013-4-23 23:52
不知道 发的帖的意义,请贴主告诉我深意...

主要是你太厉害了,哈哈
作者: 黄茂霖    时间: 2013-4-24 14:59
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段代码多,而且代码重用率比较低
作者: 张昶    时间: 2013-4-24 15:32
A中使用了继承,B中没有使用继承
作者: smile_joe    时间: 2013-4-24 15:35
曹睿翔 发表于 2013-4-24 00:43
主要是你太厉害了,哈哈

大哥,你取笑我啦
作者: 曹睿翔    时间: 2013-4-24 15:52
smile_joe 发表于 2013-4-24 15:35
大哥,你取笑我啦

哪有啊,我都受挫了,有人批我顺民,我很可悲啊,我的犀利哪里去了
作者: smile_joe    时间: 2013-4-24 15:55
曹睿翔 发表于 2013-4-24 15:52
哪有啊,我都受挫了,有人批我顺民,我很可悲啊,我的犀利哪里去了

你当爸爸了嘛   --更有爱了
看你头像是这样,如果不对,请不要介意哈
作者: 曹睿翔    时间: 2013-4-24 15:57
smile_joe 发表于 2013-4-24 15:55
你当爸爸了嘛   --更有爱了
看你头像是这样,如果不对,请不要介意哈

没事,尽管误会,我外甥女呢,很开爱
作者: smile_joe    时间: 2013-4-24 15:58
曹睿翔 发表于 2013-4-24 15:57
没事,尽管误会,我外甥女呢,很开爱

哈哈 果断好人啊,多多支持,非常感谢:)
作者: 曾德强    时间: 2013-4-25 23:37
第一个是有继承关系,第二个没有继承。属于重复工作。写代码的时候,应该考虑的一个重要因素就是代码优化,一段好的程序也应该体现在这方面有体现。Spring 框架的依赖注入和控制反转就为这个而生。
作者: xiewen    时间: 2013-4-26 00:57
第一个有继承,第二个没有继承




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2