浅谈重载和重写

目录

一、方法重载

1.1概念

1.2特点 

1.3直观代码

二、方法重写(方法覆盖)

2.1概念

2.2 应用场景

2.3注意事项

2.4直观代码 

 三、两者的比较


一、方法重载

1.1概念

方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载

  • 多个方法在同一个类中

  • 多个方法具有相同的方法名

  • 多个方法的参数不相同,类型不同或者数量不同

1.2特点 

  • 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式

  • 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载

1.3直观代码

错误格式:

public class MethodDemo {
	public static void fn(int a) {
    	//方法体
    }
    public static int fn(int a) { 	
    	//方法体
    }
}

public class MethodDemo01 {
    public static void fn(int a) {
        //方法体
    }
} 
public class MethodDemo02 {
    public static int fn(double a) { 
        //方法体
    }
}

 1.虽然MethodDemo类中两个方法体的返还值不同,但是方法重载与其无关,只和是否在同一个类中,是否具有相同的方法名,是否参数不相同,类型不同或者数量不同有关!

2.MethodDemo类中两个方法体不在同一个类中!

正确格式:

public class MethodDemo {
	public static void fn(int a) {
    	//方法体
    }
    public static int fn(double a) {
    	//方法体
    }
}

public class MethodDemo {
	public static float fn(int a) {
    	//方法体
    }
    public static int fn(int a , int b) {
    	//方法体
    }
}

二、方法重写(方法覆盖)

2.1概念

方法重写概念

  • 子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)

  • 方法重写又称方法覆盖。

2.2 应用场景

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

简单来说就是子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

2.3注意事项

  1. 私有方法不能被重写(父类私有成员子类是不能继承的)

  2. 子类方法访问权限不能更低(public > 默认 > 私有)

2.4直观代码 

public class Fu {
    private void show() {
        System.out.println("Fu中show()方法被调用");
    }

    void method() {
        System.out.println("Fu中method()方法被调用");
    }
}

public class Zi extends Fu {

    @Override
    private void show() {
        System.out.println("Zi中show()方法被调用");
    }
   
   
    @Override
    private void method() {
        System.out.println("Zi中method()方法被调用");
    }

    @Override
    public void method() {
        System.out.println("Zi中method()方法被调用");
    }
}

注意:1.子类Zi在 重写private void show() 方法时编译出错,这是父类私有的方法。上面讲过【私有方法不能被重写(父类私有成员子类是不能继承的)

           2.子类Zi在重写private void method() 方法时编译出错,访问权限不够。子类重写父类方法的时候,访问权限需要大于等于父类。【子类方法访问权限不能更低(public > 默认 > 私有)

 三、两者的比较

重载:(重载是一个类中多态性的表现,在编译时起作用(静态多态性)

  1. 必须具有不同的参数列表;
  2. 可以有不同的返回类型;
  3. 可以有不同的访问修饰符;

重写:(父类与子类之间多态性的表现,在运行时起作用(动态多态性)

  1. 参数列表必须完全与被重写的方法相同,否则不能称其为重写;
  2. 返回类型必须一直与被重写的方法相同,否则不能称其为重写;
  3. 访问修饰符的限制一定要大于等于被重写方法的访问修饰符;​​​​​
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值