继续讨论类和对象的继承和方法重写。
继承 继承类似于生物学的进化,子类通过继承父类,获得父类的性质,并且在此之上增加新的功能。在设计上,应该保证子类和父类的统一,过多的继承会导致耦合,提高复杂度。我们把前文的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'