博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA之方法的重载,递归与覆写
阅读量:3960 次
发布时间:2019-05-24

本文共 3298 字,大约阅读时间需要 10 分钟。

1.方法的重载(Overload)

定义:方法名相同,参数不同(参数类型或者个数不同)

方法的返回值类型不影响重载
有时候我们需要用到一个函数兼容多种参数的情况
这时候就要用到方法的重载
使用代码:

public class Exercise {
public static void main(String[] args) {
int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret= " +ret); double a2 = 10.3; double b2 = 20.5; double ret2 = add(a2,b2); System.out.println("ret2= "+ret2); double a3 = 10; double b3 = 20; double c3 = 30; double ret3 = add(a3, b3, c3); System.out.println("ret3= " +ret3); } public static int add(int x,int y){
return x+y; } public static double add(double x,double y){
return x+y; } public static double add(double x,double y,double z){
return x+y+z; }}

同一个方法名字,提供不同的版本实现,叫做方法重载

2方法的递归

一个方法在执行的过程中调用自身,就叫做递归

例如:递归求n的阶乘

public class Multiple {
public static void main(String[] args) {
int n=6; int ret=factor(n); System.out.println("ret= "+ret); } public static int factor(int n){
if(n==1){
return 1; }else{
return n*factor(n-1);//函数自身的调用 } }}

练习:求斐波那契数的第40个数

public class Word{
public static int count=0; public static void main(String[] args) {
System.out.println(fib(40)); System.out.println(count); } public static int fib(int n){
if(n==1||n==2){
return 1; } if(n==3){
count++; } return fib(n-1)+fib(n-2); }}

3.方法的覆写(Override)

定义:子类定义了与父类方法名称,参数个数及返回值类型相同的方法。但是被覆写不能够拥有比父类更为严格的访问权限

简单代码:

public class Person {
public void print(){
System.out.println("1.[Person]类的print方法"); }}class Student extends Person{
public void print(){
System.out.println("2.[Student]类的print方法"); }} public class Test {
public static void main(String[] args) {
new Student().print(); } }

在这里插入图片描述

注意:

1.你当前使用的对象是通过哪个类new的
2.当调用某个方法时,如果该方法已经被子类覆写了,则调用的一定是被覆写过的方法
要求:被覆写的方法不能有比父类更为严格的访问权限
访问权限:public>default>private 意味着如果父类使用public进行声明,那么子类也必须使用public声明,如果父类使用default声明,那么子类使用default或者public声明
错误的覆写

class Person {
public void print(){
System.out.println("1.[Person]类的print方法"); }} class Student extends Person{
void print(){
System.out.println("2.[Student]类的print方法"); }}public class Test1 {
public static void main(String[] args) {
new Student().print(); }}

以后写方法的时候,%99.99的情况下建议使用public;

在写属性的时候,建议使用private

问题:如果现在父类中使用private定义方法,子类使用public定义方法对吗?

代码:

class Person{
public void fun(){
this.print(); } //如果现在父类使用了private定义方法,那么表示该方法只能被父类使用 //也就也意味着子类根本不知道父类有这样的方法 private void print(){
System.out.println("1.[Perosn]类的print方法"); }}class Student extends Person{
//此时的方法只是子类定义的新方法,和父类并没有什么关系 public void print(){
System.out.println("2.[Student]类的print方法"); }}public class Test1{
public static void main(String[] args) {
new Student().fun(); }}

运行结果:1.[Person]类的print方法

重点

:覆写(override)与重载(overload)的比较

1)概念:重载是指方法名相同,参数的类型及个数不同
覆写参数的方法名,参数类型及个数,返回值类型完全相同
2)范围:重载 一个类
覆写 继承关系
3)限制:重载 没有限制关系
覆写 被覆写的方法不能拥有比父类更为严格的访问权限

转载地址:http://kylzi.baihongyu.com/

你可能感兴趣的文章
ntfs分区iis故障的解决
查看>>
个人创业“六大死穴”
查看>>
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>
软件配置管理概念-1,介绍
查看>>
软件配置管理概念-2,用户角色
查看>>
软件配置管理概念-3,CM系统的概念
查看>>
JSP/Servlet应用程序优化八法
查看>>
人生必修的181条佛理
查看>>
The Most Widely Used Java Libraries
查看>>
简单在单机使用apache-james(开源邮件服务器)
查看>>
lsof 快速起步
查看>>
使用ScribeFire方便地发布blog
查看>>