多态性
方法可呈现多种形态,同时对象实例可进行类型转换。笔者在开发中常利用这种特性,以提高代码的灵活性与扩展性。功能实现应遵循开闭原则,对已有功能的修改应尽量避免,而对新功能的扩展要保持灵活。
方法的重载
method overloading 机制可为同名方法提供不同参数形态,从而实现不同逻辑。在同一个类中定义同名方法时,只需改变参数列表的类型或数量,即可满足多样的调用需求。
方法的重写
method overriding 机制让子类在继承特性时能够重写父类方法,从而实现子类的独有逻辑。子类中定义与父类同名的方法,可覆盖父类的实现,在运行时根据对象实际类型调用相应方法。
子类类型父类化
笔者在实践中常将具体子类以父类类型引用,使得多个子类在使用时统一为父类类型。通过这种方式,可在运行时根据对象的实际类型调用相应的子类方法,实现多态行为。
下例展示了一个父类 Animal 和两个子类 Dog 与 Cat。代码中将 Dog 与 Cat 的对象赋给 Animal 类型的变量,并在运行时根据实际类型调用对应的 makeSound 方法。
public class Animal {
public void makeSound() {
System.out.println("sumingcheng");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("sumingcheng");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("sumingcheng");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound();
myCat.makeSound();
}
}
在上述示例中,myDog 和 myCat 虽然是 Animal 类型的引用,但其实际对象类型分别是 Dog 和 Cat。当调用 makeSound 方法时,会根据对象实际类型选择相应的子类实现,从而实现多态性。
定义类规则
具体类应尽量继承抽象类,从而统一子类的类型并易于后续扩展。若不需要父类中全部公共方法或属性,则可通过实现接口的方式定义所需行为。在类中定义方法时尽量使用接口或抽象类的抽象方法,以减少强制类型转换并确保代码更具扩展性与可维护性。