Java之理解多态详解
什么是多态
多态是指同样的消息可以被不同的对象接收和处理。
在实现时,一个父类的变量可以引用一个子类的对象,这个引用既可以调用父类中定义的方法,也可以调用子类中重写父类方法的方法。
多态的实现需要满足三个条件:
- 继承:多态必须存在于父类和子类之间.
- 重写:在子类中对父类的方法进行重新定义.
- 向上转型:使用父类类型的引用指向子类对象.
多态的优点
多态为程序设计带来了很多好处:
- 可扩展性:当有一个新的子类产生时,我们无需修改原有代码,只需把新类作为已有类的子类即可。
- 可维护性:增加新的行为或类不会影响现有的对象的类型,这就意味着我们可以减少出现错误的机会。
- 灵活性:可以通过多态来设计出更加灵活和可重用的代码。
多态的实例
下面通过两个具体的例子来说明多态的实现过程:
示例一
public class Animal {
public void sayHello(){
System.out.println("Animal says hello...");
}
}
public class Cat extends Animal {
public void sayHello(){
System.out.println("Cat says hello...");
}
}
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Cat();
animal1.sayHello(); // 输出: Animal says hello...
animal2.sayHello(); // 输出: Cat says hello...
}
}
在示例一中,我们定义了一个父类 Animal 和其子类 Cat,分别实现它们自己的 sayHello 方法,然后在 Test 类中分别创建了一个 Animal 对象和一个 Cat 对象,用它们分别调用 sayHello 方法。由于 Animal 对象没有被继承或重写,所以输出的是 Animal 对象中的方法;而 Cat 对象则重写了 sayHello 方法,因此输出的是重写后的方法。
示例二
public class Shape {
public void draw(){
System.out.println("Shape draw...");
}
}
public class Circle extends Shape {
public void draw(){
System.out.println("Circle draw...");
}
}
public class Square extends Shape {
public void draw(){
System.out.println("Square draw...");
}
}
public class Test {
public static void main(String[] args) {
Shape[] shapes = {new Circle(), new Square()};
for (Shape s : shapes){
s.draw();
}
}
}
在示例二中,我们定义了一个父类 Shape 和其子类 Circle、Square,并重写了这些子类自己的 draw 方法,然后我们在 Test 类中创建了一个 Shape 类型的数组并在数组中加入两个子类对象,然后通过循环利用 Shape 类型的引用去调用每个子类对象的 draw 方法。由于每个子类都重写了 draw 方法,所以输出的是重写后的方法。
总结
多态是面向对象编程中一个很重要的概念,能够让我们更好地利用继承和重写来设计出更加灵活和可重用的代码。在实现多态时需要满足三个条件,重写、继承、向上转型。同时,多态还能让我们实现很多有趣的功能,如父类行为和子类行为的组合,这样就实现了一种灵活性并提高了代码的可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之理解多态详解 - Python技术站