继承和多态
1.继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
2.静态语言对比动态语言
动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。
3.如果子类也定义了一个构造函数,那么应该在子类的构造函数中显式的调用父类的构造函数。
因为在本质上,子类重写了这个构造函数,如果不调用超类的构造函数,那么在超类中定义的属性就无法使用!!!
4.java和python鸭子类型的对比
java代码:会报编译错误**
public class D {
public static void main(String[] args) {
Dog dog=new Dog();
Tree tree=new Tree();
//在此会报编译错误
two_animal(tree);
}
public static void two_animal(Animal animal){
System.out.println("Two animal is running");
}
}
class Animal{
public void run(){
System.out.println("Animal is running");
}
}
class Dog extends Animal{
public void run (){
System.out.println("Dog is running");
}
}
class Tree{
public void run(){
System.out.println("Tree is running");
}
}
python则可以正常运行
class Animal():
def run(self):
print("Animal is running")
class Dog(Animal):
def run(self):
print("Dog is running")
def runs(animal):
print("Two animal is running")
class Tree():
def run(self):
print('Tree is running')
dog = Dog()
tree = Tree()
runs(dog)
runs(tree)
网友评论