4.25 java

1.覆写

在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。

例如,在Person类中,我们定义了run()方法。

在子类Student中,覆写这个run()方法。

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

@Override和@Overload不同的是,如果方法名不同,就是Overload,Overload方法是一个新方法;如果方法名相同,并且返回值也相同,就是Override。当然如果方法名相同,但返回值不同也是不同的方法。(出现第三种情况会报错)。

@Override用于帮助编译器检测是否进行正确的覆写。如果方法名错误会进行报错。

但是@Override不是必需的。

当我们向下转型时,如果子类覆写了父类的方法:

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run(); // 应该打印Person.run还是Student.run?
    }
}

class Person {
    public void run() {
        System.out.println("Person.run");
    }
}

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

一个实际类型为Student,引用类型为Person的变量,调用其run()方法,调用的是Student的run()方法。

java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。

这个非常重要的特性在面向对象编程中称之为多态。

2.多态

多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。

Person p = new Student();

p.run();

 这两行明显看出调用的是Student内的run()方法。(明确了p的类型)

public void Twicerun(Person p){
p.run();

p.run();

}

但这个传入的参数类型是Person,我们是无法知道传入的参数实际类型究竟是Person,还是Student,还是Person的其他子类,因此,也无法确定调用的是不是Person类定义的run()方法。

 所以,多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。这种行为充满了不确定性

 但多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。

举例:

假设我们定义一种收入,需要给它报税,那么先定义一个Income类:

class Income {
    protected double income;
    public double getTax() {
        return income * 0.1; // 税率10%
    }
}

对于工资收入,可以减去一个基数,那么我们可以从Income派生出SalaryIncome,并覆写getTax()

class Salary extends Income {
    @Override
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }
        return (income - 5000) * 0.2;
    }
}

如果你享受国务院特殊津贴,那么按照规定,可以全部免税:

class StateCouncilSpecialAllowance extends Income {
    @Override
    public double getTax() {
        return 0;
    }
}

现在,我们要编写一个报税的财务软件,对于一个人的所有收入进行报税,可以这么写:

public double totalTax(Income... incomes) {
    double total = 0;
    for (Income income: incomes) {
        total = total + income.getTax();
    }
    return total;
}

 利用多态:

public class Main {
    public static void main(String[] args) {
        // 给一个有普通收入、工资收入和享受国务院特殊津贴的小伙伴算税:
        Income[] incomes = new Income[] {
            new Income(3000),
            new Salary(7500),
            new StateCouncilSpecialAllowance(15000)
        };
        System.out.println(totalTax(incomes));
    }

    public static double totalTax(Income... incomes) {
        double total = 0;
        for (Income income: incomes) {
            total = total + income.getTax();
        }
        return total;
    }
}

class Income {
    protected double income;

    public Income(double income) {
        this.income = income;
    }

    public double getTax() {
        return income * 0.1; // 税率10%
    }
}

class Salary extends Income {
    public Salary(double income) {
        super(income);
    }

    @Override
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }
        return (income - 5000) * 0.2;
    }
}

class StateCouncilSpecialAllowance extends Income {
    public StateCouncilSpecialAllowance(double income) {
        super(income);
    }

    @Override
    public double getTax() {
        return 0;
    }
}

从上面的例子可以看出利用多态,totalTax()方法只需要和Income打交道,它完全不需要知道SalaryStateCouncilSpecialAllowance的存在,就可以正确计算出总的税。如果我们要新增一种稿费收入,只需要从Income派生,然后正确覆写getTax()方法就可以。把新的类型传入totalTax(),不需要修改任何代码。

如果不利用多态,因为子类中方法名的不同,使用totalTax()的时候就得利用类中的所有对象。

### 回答1: UE4.25是著名的游戏引擎Unreal Engine的最新版本,而Gitee则是一个国内知名的代码托管平台。在UE4.25中,通过使用Gitee平台,可以更加方便地进行代码的管理和团队协作。一方面,Gitee平台提供了完整的代码托管和版本管理功能,使得开发者可以随时备份和恢复项目代码,并通过分支和合并等操作,轻松地协同工作。另一方面,Gitee平台还提供了项目协作、代码审核等功能,有利于多人协同开发代码和提高开发效率。不仅如此,Gitee平台还优化了代码仓库的访问速度,提供丰富的开发者社区资源,以及支持多种Webhooks和CI/CD服务,使得开发者能够拥有更加顺畅的开发体验。因此,对于使用UE4.25进行游戏开发的团队来说,Gitee平台是一个非常值得考虑和使用的代码托管和协作平台。 ### 回答2: UE4.25是开发游戏的一款强大的引擎,而Gitee是一个国内知名的代码托管平台。将UE4.25与Gitee结合使用,可以更高效地管理团队的代码。通过在Gitee上创建仓库,团队成员可以很方便地进行协作开发,同步更新代码,并保证代码的版本控制。同时,Gitee支持一个可视化的操作界面,方便开发者进行代码的管理和修改。与其他代码托管平台相比,Gitee的优势在于服务器位于国内,能够提供更好的访问速度和稳定性。此外,Gitee还通过开放API支持与第三方工具的集成,方便开发者进行项目管理和自动化构建等工作。因此,将UE4.25与Gitee结合使用,可以有效地提高团队协作和开发效率,使开发者更加专注于游戏的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值