Java 方法重写怎么用

你有没有过这种经历:买了一件基础款的白T恤,自己画了个小图案就变成了独一无二的专属款?其实在Java编程里,“方法重写”就有点像给基础功能的T恤“DIY改图案”——不过改的是代码里的功能逻辑。很多新手刚学Java的时候,会把它和“方法重载”搞混,其实只要用日常的例子一讲,很快就能明白怎么用。

什么是方法重写?

先简单说个场景:你家里有个老式的“基础闹钟”,功能只有到点响铃。后来你想做个新的闹钟,不仅要响铃,还要同步发消息到手机、点亮床头灯。这时候你不用从零写一个新闹钟,只需要把老闹钟的“响铃”功能改得更丰富,这就是方法重写——在子类里,重新写一个和父类方法“名字、参数、返回值都一样”的方法,给原来的功能加新内容。

Java 方法重写怎么用

这里要注意几个小前提:就像你不能把闹钟改成电饭煲一样,重写的方法必须和父类的方法“长得一样”,不然就不是“改同一个功能”了。而且重写的方法不能比父类的方法“管得更严”,比如父类的方法是“公开的”,子类就不能改成“私有的”,不然就没法正常用了。

什么时候需要用方法重写?

举个生活化的例子:假设你有一个父类“动物”,里面有个方法叫“叫”,默认逻辑是输出“动物在叫”。现在你要做“猫”和“狗”两个子类,猫叫是“喵喵”,狗叫是“汪汪”,这时候就不能用父类的默认逻辑了,就得给每个子类重写“叫”方法。

再比如,你做了一个“文件处理器”父类,有个方法“读取文件”,默认读TXT文件。后来要支持读PDF、Word,这时候就可以在子类里重写这个读取方法,把对应格式的解析逻辑加进去。简单说:当父类的方法满足不了子类的特殊需求时,就用方法重写,不用重复写整个类,省力气还清晰。

怎么正确使用方法重写?

新手最容易踩的坑,就是把“重载”当成“重写”。再用闹钟的例子区分:如果是“新做一个带震动功能的闹钟,参数比老的多一个震动开关”,这是重载;如果是“同一个闹钟的响铃逻辑,从只响改成响+亮灯”,这才是重写。

还有个实用的小技巧:写重写方法的时候,加上@Override注解就不会错——这相当于给代码加了个“防伪标”,如果不小心写错了方法名、参数,编译器会直接报错,提醒你哪里不对,不用跑半天才发现功能不对。

举个实际的小代码片段,你一看就懂:

`java

// 父类:动物

class Animal {

void makeSound() {

System.out.println("动物在叫");

}

}

// 子类:猫,重写makeSound方法

class Cat extends Animal {

@Override

void makeSound() {

System.out.println("喵喵喵");

}

}

// 子类:狗,重写makeSound方法

class Dog extends Animal {

@Override

void makeSound() {

System.out.println("汪汪汪");

}

}

`

你看,Cat和Dog的makeSound方法,和父类的方法名、参数都一样,就是改了输出内容,这就是正确的重写。

用的时候要注意什么?

最后再提几个容易忽略的细节:第一,重写的方法不能是“静态的”,静态方法属于类,不属于对象,没法被子类改;第二,如果父类的方法是final修饰的,就不能重写了,相当于给这个方法加了“不能改”的锁;第三,重写方法的返回值可以是父类返回值的“子类”,比如父类返回Animal,子类可以返回Cat,但不能随便换,比如不能换成String。

其实方法重写的核心,就是“在已有基础上改出适合自己的功能”,就像你给白T恤加图案,不用重新做一件,只需要在原来的版型上改细节。掌握了这个逻辑,再结合实际的小例子,就不会再把重写和重载搞混,也能在写代码的时候灵活用这个功能,不用重复造轮子啦。

上一篇 TypeScript as 怎么用