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

  • 时间:
  • 浏览:0
  • 来源:神彩大发快3_彩神大发快3官方

法律法律依据重写指的是当子类继承父类的本来我,从父类继承过来的法律法律依据那末满足子类的能够 ,子类希望有被委托人的实现,这时能够 对父类的法律法律依据进行重写,法律法律依据重写是实现多态和动态绑定的关键。

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

下面的代码演示了法律法律依据重写怎样才能实现

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

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

下面这段代码

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

  组合也本来我设计类的本来我把要组合的类的对象加入到该类中作为被委托人的成员变量。组合的优点:

   1 当前对象那末通过所所含的那个对象去调用其法律法律依据,某些所所含的对象的实物细节对当前对象时不可见的。

  2 当前对象与所含的对象是一个多多 低耦合关系,意味着着着修改所含对象的类中代码不能够 修改当前对象类的代码。

  3 当前对象都能够 在运行时动态的绑定所所含的对象。都能够 通过set法律法律依据给所所含对象赋值。

  组合的缺点:

  1 容易产生不多的对象。

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

由此可见,组合比继承更具灵活性和稳定性,某些在设计的本来我优先使用组合。那末当下列条件满足时才考虑使用继承:

1 子类是一种生活 特殊的类型,而不本来我父类的一个多多 角色

2 子类的实例不能够 变成本来我类的对象

3 子类扩展,而就有覆盖意味着着着使父类的功能失效

等同于下面的java代码

继承与组合使用总结:

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

  继承的缺点有以下几点:

  1 父类的实物细节对子类是可见的。

  2 子类从父类继承的法律法律依据在编译时就选着下来了,某些无法在运行期间改变从父类继承的法律法律依据的行为。

3 意味着着着对父类的法律法律依据做了修改的话(比如增加了一个多多 参数),则子类的法律法律依据能够 做出相应的修改。某些说子类与父类是一种生活 高耦合,违背了面向对象思想。

等同于下面的Java代码

继承都能够 重用父类的代码,从而繁复多多线程 设计,继承是is-a的关系,apple is a kind of fruit(苹果4 苹果4 苹果4 手机手机4 是一种生活 水果)。还有一种生活 代码重用的法律法律依据是组合,组合是has-a的关系(one person has a head)。继承在前面意味着着着讲了,这边只给出组合的使用代码:

代码

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

加进公众微信号,都能够 了解更多最新Spark、Scala相关技术资讯

一 继承

当某个类在多多线程 中只使用一次时,都能够 将类定义为匿名类,匿名类的定义如下:

不得不提的是,意味着着着父类是抽象类,则不override关键字都能够 不加,这意味着着着意味着着着继承的父类是抽象类(假设抽象类为AbstractClass,子类为SubClass),在SubClass类中,AbstractClass对应的抽象法律法律依据意味着着着那末实现的话,那SubClass本来我需要 定义为抽象类,本来我的话能够 要有法律法律依据的实现,本来我的话,加不加override关键字就有都能够 的。下面是一个多多 实例代码:

二 组合