示例解析java重载Overloading与覆盖Overriding
正文
在 Java 中,方法的重载(Overloading)和覆盖(Overriding)是两个重要的概念。它们都涉及到方法的定义与使用,但作用和规则有所不同。
重载(Overloading)
重载是指在同一个类中定义多个同名的方法,但它们的参数列表不同(参数的个数、类型或顺序不同)。重载允许我们使用相同的方法名来实现不同的功能,提高了代码的可读性和可维护性。
下面是一个重载的例子:
1 2 3 4 5 6 7 8 9 10 11 | public class Calculator { public int add( int a, int b) { return a + b; } public double add( double a, double b) { return a + b; } public int add( int a, int b, int c) { return a + b + c; } } |
在这个例子中,Calculator
类有三个 add
方法,分别接受不同数量和类型的参数。当我们调用 add
方法时,Java 会根据传入参数的类型和数量自动选择正确的方法。
1 2 3 4 | Calculator calculator = new Calculator(); int result1 = calculator.add( 1 , 2 ); // 调用第一个 add 方法,输出 3 double result2 = calculator.add( 1.0 , 2.0 ); // 调用第二个 add 方法,输出 3.0 int result3 = calculator.add( 1 , 2 , 3 ); // 调用第三个 add 方法,输出 6 |
覆盖(Overriding)
覆盖是指子类重新定义父类的方法,以实现自己的功能。当子类覆盖父类的方法时,方法名、参数列表和返回类型必须与父类完全相同。覆盖允许我们在不修改父类的基础上,定制子类的行为。
下面是一个覆盖的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class Animal { public void makeSound() { System.out.println( "The animal makes a sound" ); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println( "The dog barks" ); } } public class Cat extends Animal { @Override public void makeSound() { System.out.println( "The cat meows" ); } } |
在这个例子中,Dog
和 Cat
类都继承了 Animal
类,并分别覆盖了 makeSound
方法。当我们调用 makeSound
方法时,Java 会根据对象的实际类型选择正确的方法。
1 2 3 4 5 6 | Animal myAnimal = new Animal(); myAnimal.makeSound(); // 输出 "The animal makes a sound" Animal myDog = new Dog(); myDog.makeSound(); // 输出 "The dog barks" Animal myCat = new Cat(); myCat.makeSound(); // 输出 "The cat meows" |
注意,当子类覆盖父类的方法时,可以使用 @Override
注解来显式声明。这样,如果我们不小心修改了方法签名或者拼写错误,编译器会报错,帮助我们捕获潜在的错误。
总结一下,重载和覆盖是 Java 中两个重要的概念。重载允许我们在同一个类中定义多个同名但参数列表不同的方法,实现不同的功能。覆盖允许子类重新定义父类的方法,定制自己的行为。理解这些概念并在实际编程中应用它们,可以帮助我们编写更高效、易读的代码。
以上就是示例解析java重载Overloading与覆盖Overriding的详细内容,更多关于java重载覆盖的资料请关注脚本之家其它相关文章!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
SpringMVC中@ModelAttribute与@RequestBody的区别及说明
这篇文章主要介绍了SpringMVC中@ModelAttribute与@RequestBody的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11基于<aop:aspect>与<aop:advisor>的区别
这篇文章主要介绍了<aop:aspect>与<aop:advisor>的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
最新评论