Scala入门到精通——第九节 继承与组合

  • 时间:
  • 浏览:2

下面这段代码

  继承是Is a 的关系,比如说Student继承Person,则说明Student is a Person。继承的优点是子类都须要重写父类的法子 来方便地实现对父类的扩展。

  继承的缺点有以下几点:

  1 父类的内部管理细节对子类是可见的。

  2 子类从父类继承的法子 在编译时就选则下来了,许多许多无法在运行期间改变从父类继承的法子 的行为。

3 完后 对父类的法子 做了修改得话(比如增加了一有一一两个 多参数),则子类的法子 须要做出相应的修改。许多许多说子类与父类是一种生活高耦合,违背了面向对象思想。

法子 重写指的是当子类继承父类的完后 ,从父类继承过来的法子 都还能能满足子类的须要,子类希望有许多人的实现,这时须要对父类的法子 进行重写,法子 重写是实现多态和动态绑定的关键。

scala中的法子 重写同java一样,也是利用override关键字标识重写父类的算法。

下面的代码演示了法子 重写咋样实现

继承与组合使用总结:

去掉 公众微信号,都须要了解更多最新Spark、Scala相关技术资讯

当某个类在系统进程中只使用一次时,都须要将类定义为匿名类,匿名类的定义如下:

代码

等同于下面的Java代码

不得不提的是,完后 父类是抽象类,则不override关键字都须要不加,这是完后 完后 继承的父类是抽象类(假设抽象类为AbstractClass,子类为SubClass),在SubClass类中,AbstractClass对应的抽象法子 完后 那末实现得话,那SubClass也须要定义为抽象类,而且得话须要要有法子 的实现,就说 得话,加不加override关键字前会 都须要的。下面是一有一一两个 多实例代码:

  组合也就说 设计类的完后 把要组合的类的对象加入到该类中作为许多人的成员变量。组合的优点:

   1 当前对象都还能能通过包中含的那个对象去调用其法子 ,许多许多包中含的对象的内部管理细节对当前对象时不可见的。

  2 当前对象与中含的对象是一有一一两个 多低耦合关系,完后 修改中含对象的类中代码不须要修改当前对象类的代码。

  3 当前对象都须要在运行时动态的绑定包中含的对象。都须要通过set法子 给包中含对象赋值。

  组合的缺点:

  1 容易产生不多的对象。

  2 为了能组合多个对象,须要仔细对接口进行定义。

由此可见,组合比继承更具灵活性和稳定性,许多许多在设计的完后 优先使用组合。都还能能当下列条件满足时才考虑使用继承:

1 子类是一种生活特殊的类型,而不就说 父类的一有一一两个 多角色

2 子类的实例不须要变成就说 类的对象

3 子类扩展,而前会 覆盖完后 使父类的功能失效

二 组合

“多态”(Polymorphic)也叫“动态绑定”(Dynamic Binding)、“迟绑定”(Late Binding),指“在执行期间(而非编译期间)判断所引用对象的实际类型,根据实在际类型调用其相应的法子 。”即指子类的引用都须要赋给父类,系统进程在运行时根据实际类型调用对应的法子

下面的代码演示了scala中的多态与动态绑定:

继承都须要重用父类的代码,从而冗杂系统进程设计,继承是is-a的关系,apple is a kind of fruit(苹果是一种生活水果)。还有一种生活代码重用的法子 是组合,组合是has-a的关系(one person has a head)。继承在前面完后 讲了,这边只给出组合的使用代码:

等同于下面的java代码

下面的代码演示scala在继承的完后 ,构造函数的执行顺序

一 继承

下类的代码演示了scala类的继承