Java的多态

本文详细介绍了Java中的多态性概念,包括其定义、实现条件(继承、重写、向上转型)以及好处。通过一个示例展示了如何在Person类及其子类Scientist、Teacher和Waiter中实现多态,根据输入选择不同类型的对象,计算不同职业的年收入。多态使得代码更加灵活,易于扩展。
摘要由CSDN通过智能技术生成

Java的多态

一、什么是多态?

一种引用类型,多种表现形式。在满足一定的条件下,子类可以转换成父类,用父类的对象即可调出公有的方法,且方法的形式是子类中定义的。

二、多态的条件

Java实现多态有三个必要条件:继承、重写、向上转型。

    继承:在多态中必须存在有继承关系的子类和父类。

    重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

    向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

三、多态的好处:

这样我们可以进行更好的扩展、我们可以使用父类中的任何一个类,就像dog 变量我们可以使用Aimal中的任何一个子类的方法和属性

四、多态的两种表现方式:

重载:
重载是发生在一个类中的,方法名相同,但是方法的参数、方法的个数、以 及方法的顺序是可以不相同的

重写:
.重写是发生在不同类中的

.方法的名称、方法的参数列表、方法的返回类型相同都要相同

.子类的修饰符要大于父类的修饰符

.方法抛出的异常不一样,子类抛出的异常要不父类抛出的异常小

.子类在调用方法时则优先考虑子类中的方法
—父类:Person.java

import java.util.Scanner;

public class Person {
    public int salary;
    public int allSalary(){
        return 0;
    }
    public static void main(String[] args) {
        Person p = null;

        for (int n = 0; n < 3; n++) {
            @SuppressWarnings("resource")
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个1-3的数字:\n1 is Teacher\n2 is Scientis\n3 is Waiter");
            int i = sc.nextInt();
            //分别指向了不同的子类,输出的结果是不一样的
            if (i == 1) {
                p = new Teacher(5000);
                System.out.println(p.allSalary());
            } else if (i == 2) {
                p = new Scientist(5000);
                System.out.println(p.allSalary());
            } else if (i == 3) {
                p = new Waiter(5000);
                System.out.println(p.allSalary());
            } else {
                System.out.println("?\n请输入1-3");
            }

        }
}
}

—子类:Scientist .java

 public class Scientist extends Person{
    public Scientist(int salary){
        this.salary = salary;
    }

    public int allSalary(){
        int aa = salary*12+36500;
        System.out.print("五五开一年的工资:");
        return aa;
    }
}

Waiter.java

public class Waiter extends Person{
    public Waiter(int salary){
        this.salary = salary;
    }

    public int allSalary(){
        int aa = salary*12;
        System.out.print("服务员一年的工资:");
        return aa;
    }
}

Teacher .java

public class Teacher extends Person{
    public Teacher(int salary){
        this.salary = salary;
    }

    public int allSalary(){
        int aa = salary*12+3650;
        System.out.print("教师一年的工资:");
        return aa;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值