js类、继承基本写法:
class A{
constructor(name, age){
this.name = name
this.age = age
}
move(){
console.log('类A中的方法')
}
}
a = new A('张三', 18)
a.move()
console.log(a)
实例a的move方法在的原型对象(Prototype)上
class B extends A{
constructor(name, age, height){
super(name, age)
this.height = height
}
}
b = new B('李四', 19, 180)
b.move()
console.log(b)
实例b的move方法在原型对象上找不到,沿着原型链找父类A的原型对象发现可以找到
class B extends A{
constructor(name, age, height){
super(name, age)
this.height = height
}
move(){
console.log('重写A中的方法')
}
}
b = new B('李四', 19, 180)
b.move()
console.log(b)
重写move方法后可以在实例b的原型对象上找到,根据查找顺序直接取实例b的move方法
总结:
1.类中的构造器(constructor)不是必须写的,要对实例进行一些初始化的操作,如添加指定属性时才写
2.如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的
3.类中所定义的方法,都是放在了类的原型对象上,供实例去使用
python类、类的继承基本写法:
class A():
def __init__(self, name, age):
self.name = name
self.age = age
def move_test(self):
print('A类中的方法')
a = A('张三', 18)
print(a.name)
print(a.age)
a.move_test()
class B(A):
# pass
def __init__(self, name, age, height):
super().__init__(name, age)
self.height = height
b = B('李四', 19, 180)
print(b.name)
print(b.age)
print(b.height)
b.move_test()