从设计的角度来讲,类"车"与"丰田"设计为抽象/继承关系好,还是设计为接口/实现关系好?第一种:
abstract class car { }
class fengtian extends car { }
第二种:
interface car { }
class fengtian implements car {}抽象类反映的是继承关系,是“Is a”的关系,抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象。
接口更像是“like a”的关系,对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。从真正面向对象的角度来讲,我个人选择第一种方案,不知道我的理解是否正确,请各位高手帮我解答,谢谢!

解决方案 »

  1.   

    个人觉得继承好,因为car和丰田有很多相同的实现内容,比如都能前进,都能倒车,都有重量,油耗之类的属性
      

  2.   

    interface car{
    }
    interface fengtian{
    }
    class fengtiancar implements car,fengtian{
    }
      

  3.   

    如果你要在Car实现一部份方法就用继承,要是全部是没有实现的方法就用接口。还有抽象类是用来作扩展用的。
      

  4.   

    interace Icar{}
    abstract class car implements Icar{ } interace Ifengtian extends Icar{}
    class fengtian extends car implements Ifengtian { }
      

  5.   

    从你这个案例来看有以下特点:
    1、丰田车是车的一种实现,具有车的各种属性,有些内容是大部分车共同的,但是有些部分有自己的特别的实现。
    2、显然你的案例中还会有其他的车,而这些车都会作为参数被其他的类的方法调用。
    3、假设有一种车他具有车的全部属性,但是没有任何一个部分的实现是与其他车相同的,也就是说这个车是special的 the one,也就是说这个车没有必要继承一个其他的车,因为他的每一个部分都是独一无二的。在考虑以上3点后,尤其根据你提的问题,我们侧重看第3点,那么结果就清楚了,我们需要作成interface的形式:
    interface Car {
    }这时在考虑第一点,有些车是可以从基类车中继承一部分的东西,只需修改一部分特别的,所以我们需要有这样一个基类:
    class DefaultCar implements Car {
    }然后就是我们经常被召回的丰田车,为了让我们的代码显得更专业,不应该用拼音,而应该使用TOYOTA:
    class ToyotaCar extends DefaultCar {
    }最后我们来看看那个the one,他没有必要从DefaultCar中继承,因为他是special的
    class TheOneCar implements Car {
    }这样以来你的各种Car都满足以上的第2点考虑,并且能充分利用已有代码,避免代码重复。