谈谈面向对象的陷阱
一、继承
面向对象可以继承,而对于实际开发中,往往很难比价好的做抽象,进而出现滥用继承的情况。如下面的代码,对于TestAnimal的call方法来说,单纯从代码上看,它应该是调用Human的walk方法。而实际上调用的确实Cat的方法,从而导致了可读性的混乱。
public abstract class Animal {
abstract void walk();
}
public class Human extends Animal {
@Override
void walk() {
System.out.println("两只脚走路");
}
}
public class Cat extends Human {
@Override
void walk() {
System.out.println("四只脚走路");
}
}
public class TestAnimal {
public static void main(String[] args) {
Cat cat =new Cat();
Human human=(Human) cat;
new TestAnimal().call(human);
}
void call(Human human){
human.walk();
}
}