JAVA三大特性之多态

引言:

 在Java编程领域,多态是一项强大而灵活的特性,它允许我们以一种抽象的方式处理对象,使得代码更加可扩展、可维护,并提高了软件的可重用性。

什么是多态?

多态:同一类型的对象不同的情境下表现出不同的行为

在Java中,多态性通过继承和方法重写来实现。简单点说的话,多态性是通过父类引用指向子类对象,并根据实际的对象类型调用相应的方法。

下面我将举一些现实生活中的例子来帮助大家理解多态

假设有一个“动物”类作为父类,派生出子类“狗”和“猫”。在程序中,可以使用“动物”类的引用来指向“狗”或“猫”对象。当调用某个方法时,实际执行的是对应子类中的方法,而不是父类中的方法。

class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("狗汪汪叫");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("猫喵喵叫");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.makeSound(); // 输出:狗汪汪叫
        animal2.makeSound(); // 输出:猫喵喵叫
    }
}

在上面的代码中,我们定义了一个父类Animal和两个子类DogCat,它们都具有makeSound方法。在Main类的main方法中,我们使用父类的引用分别指向DogCat对象,并调用makeSound方法。由于多态性的存在,实际执行的是对应子类中重写的方法。

这样的话通过重写方法,来实现具有相同特性的对象(继承体现)在不同场景下表现形式的多样性

多态在实际开发中的一些场景

1.员工管理系统中的应用

在一个员工管理系统中,可能有多种类型的员工,如全职员工、兼职员工和临时员工。通过使用多态性,可以定义一个通用的Employee类,它包含共享的方法(如计算薪水和显示员工信息)。然后,通过派生出不同类型的员工子类,每个子类可以根据自身的特性来重写和扩展这些方法。这样,在处理员工时,可以使用通用的Employee类引用,根据实际的员工类型调用对应的方法。

代码实现:
abstract class Employee {
    public abstract void calculateSalary();
    public abstract void displayInfo();
}

class FullTimeEmployee extends Employee {
    @Override
    public void calculateSalary() {
        System.out.println("计算全职员工薪水");
    }

    @Override
    public void displayInfo() {
        System.out.println("显示全职员工信息");
    }
}

class PartTimeEmployee extends Employee {
    @Override
    public void calculateSalary() {
        System.out.println("计算兼职员工薪水");
    }

    @Override
    public void displayInfo() {
        System.out.println("显示兼职员工信息");
    }
}

public class Main {
    public static void main(String[] args) {
        Employee employee1 = new FullTimeEmployee();
        Employee employee2 = new PartTimeEmployee();

        employee1.calculateSalary(); // 输出:计算全职员工薪水
        employee1.displayInfo(); // 输出:显示全职员工信息

        employee2.calculateSalary(); // 输出:计算兼职员工薪水
        employee2.displayInfo(); // 输出:显示兼职员工信息
    }
}

2.游戏中的应用

在游戏开发中,经常需要处理不同类型的角色、敌人或物体。通过使用多态性,可以定义一个通用的GameObject类,它包含共享的方法(如移动和攻击)。然后,通过派生出具体的子类,每个子类可以根据自身的特性来重写和扩展这些方法。这样,在游戏中操作对象时,可以使用通用的GameObject类引用,根据实际的对象类型调用对应的方法。

代码实现
abstract class GameObject {
    public abstract void move();
    public abstract void attack();
}

class Player extends GameObject {
    @Override
    public void move() {
        System.out.println("玩家移动");
    }

    @Override
    public void attack() {
        System.out.println("玩家攻击");
    }
}

class Enemy extends GameObject {
    @Override
    public void move() {
        System.out.println("敌人移动");
    }

    @Override
    public void attack() {
        System.out.println("敌人攻击");
    }
}

public class Main {
    public static void main(String[] args) {
        GameObject object1 = new Player();
        GameObject object2 = new Enemy();

        object1.move(); // 输出:玩家移动
        object1.attack(); // 输出:玩家攻击

        object2.move(); // 输出:敌人移动
        object2.attack(); // 输出:敌人攻击
    }
}

3.多态在多媒体中的程序应用

在多媒体播放器应用程序中,支持播放不同类型的媒体文件,如音频和视频。通过使用多态性,可以定义一个通用的Media类,包含共享的播放方法。然后,通过派生出Audio和Video子类,每个子类可以根据文件类型来重写播放方法,并添加特定的处理逻辑。这样,在播放媒体文件时,可以使用通用的Media类引用,根据实际的文件类型调用对应的方法。

代码实现
abstract class Media {
    public abstract void play();
}

class Audio extends Media {
    @Override
    public void play() {
        System.out.println("播放音频");
    }
}

class Video extends Media {
    @Override
    public void play() {
        System.out.println("播放视频");
    }
}

public class Main {
    public static void main(String[] args) {
        Media media1 = new Audio();
        Media media2 = new Video();

        media1.play(); // 输出:播放音频
        media2.play(); // 输出:播放视频
    }
}

多态有哪些好处?

  • 代码的可扩展性
    • 多态性使得代码更具灵活性和可扩展性。通过定义通用的父类,派生出具体的子类,并通过父类引用指向子类对象,可以在不修改现有代码的情况下添加新的子类。这样,系统的扩展变得更加容易,且不会破坏原有的代码结构。
  • 代码的可维护性
    • 通过使用多态性,可以将共享的行为和方法定义在父类中,使得代码更具可维护性。如果需要对共享的行为进行修改或优化,只需修改父类的实现即可,而无需修改所有的子类。这样,可以更轻松地保持代码的一致性和可维护性
  • 代码的可重用性
    • 多态性可以促进代码的重用。通过将对象视为其父类类型,可以使用父类的引用来引用具体的子类对象。这样,相同的代码可以适用于不同的子类对象,提高了代码的重用性。同时,通过扩展已有的父类,可以创建新的子类来满足不同的需求,而不需要重复编写相似的代码。
  • 代码的灵活性
    • 多态性使得程序更具灵活性。通过父类引用指向子类对象,并根据实际的对象类型调用相应的方法,可以根据不同的需求和情境改变程序的行为。这样,可以根据具体的对象类型决定程序的逻辑,从而实现更加灵活和动态的程序设计。
  • 提高代码的可读性和可理解性
    • 多态性可以使代码更具可读性和可理解性。通过使用父类引用来调用方法,无需关心具体的对象类型,从而简化了代码的理解和分析。代码变得更加清晰和易于理解,降低了代码的复杂性和维护的难度。

结束语     

在当前快速发展的时代中,技术变革日新月异,机遇与挑战并存。衷心祝愿所有读者能够抓住时代的机遇,不断学习和掌握新的技术,保持对创新的热情。多态性只是面向对象编程的冰山一角,而整个技术领域还有无尽的探索和发展等待着我们。不断提升自己的技能,跟上技术的步伐,终将成为在新的时代中脱颖而出的优秀开发者。

愿你-的编程之路充满挑战和成就,在实践中不断提升自己的能力,创造出令人瞩目的技术解决方案。祝愿您能够在新的时代中抓住机遇,实现自己的目标和梦想。

posted @ 2023-07-16 21:41  园友3287483  阅读(32)  评论(0)    收藏  举报  来源