Python和Scala的类和对象(二)

2018-08-06 14:15:14 浏览数 (1)

继续讨论类和对象的继承和方法重写。

继承 继承类似于生物学的进化,子类通过继承父类,获得父类的性质,并且在此之上增加新的功能。在设计上,应该保证子类和父类的统一,过多的继承会导致耦合,提高复杂度。我们把前文的Book抽象类作为父类,来试一下继承。在Scala里使用extends来继承父类,NewBook继承了Book的所有非私有成员,并且使得NewBook成为Book的子类,如果没有继承Book类的话,就会默认你继承scala.AnyRef类。Python的继承,因为历史原因,存在了多继承(后续详解),它的继承直接在()写上父类的名字,与Scala的类类似,所有的类都是object类的子类。 Scala

代码语言:javascript复制
class NewBook(conts: String) extends Book {
    def openBooks: String = conts
  }

Python

代码语言:javascript复制
class NewBook(Books):

    def __init__(self, conts):
        self.conts = conts

    def open_books(self):
        return self.conts

4.方法重写 方法重写要保证和你要重写的方法输入类型和输出类型一致。Scala要重写父类的方法,可以加上override符号,在之前的文章也使用过,覆写toString方法。用来重写父类的具体成员之前加上这个修饰符。Python只要保证方法名一致即可重写。不过注意,当你重新改写父类的某个方法时,要注意对子类的影响,否则你写的基类就成了“脆弱基类”。 Scala

代码语言:javascript复制
class A {
    def a:String = "a"
  }

class B extends A {
    override def a: String = "b"
  }

Python

代码语言:javascript复制
class A:

    def a(self):
        return 'a'

class B(A):

    def a(self):
        return 'b'

0 人点赞