java面向对象编程_重载和重写

举报
bug郭 发表于 2022/07/31 13:13:10 2022/07/31
【摘要】 重载和重写 重载方法重载就是,在一个类中方法名相同,参数列表不同,返回值无关class Sum{ public int add(int a,int b){ return a+b; } public int add(int a,int b,int c){ return a+b; } public double add(double a, d...

重载和重写

重载

方法重载就是,在一个类中方法名相同,参数列表不同,返回值无关

class Sum{
   public int add(int a,int b){
       return a+b;
   }
    public int add(int a,int b,int c){
        return a+b;
    }
    public double add(double a, double b){
        return a+b;
    }
}

上面add方法构成方法重载!

重写

啥是重写呢?

重写就是子类中有父类同名的方法就构成了重写

package demo;
public class Animal{
    protected String name;
    protected int age;
    public void eat(){
        System.out.println("Animal::eat()");
    }
}
class Bird extends Animal{
    //和父类相同的方法
    public void eat(){
        System.out.println("Bird::eat()"); 
    } 
}

重写注意事项

  • 方法的返回值和参数列表必须和父类相同才能构成重写

方法的返回值不同,重写失败
在这里插入图片描述方法的参数不同,重写失败
在这里插入图片描述
方法名,返回值,参数相同,构成重写
在这里插入图片描述

  • 重写的方法的修饰符的权限要高于或等于父类中的修饰符权限
    在这里插入图片描述在这里插入图片描述
  • 重写的方法返回值类型不一定和父类的方法相同(但是建议最好写成相同, 特殊情况除外)

协变类型

就是子类重写的方法可以返回父类方法返回值的子类!!!
在这里插入图片描述可以看到重写方法的返回值是父子类关系时,也能构成重写!!!

重写和重载的区别

  • 方法重载指的是在一个类中同名的方法
    条件:方法名相同,参数列表不同,返回值一般不做要求!

  • 方法重写指的是子类中的方法与父类中的方法同名,且方法的参数列表和返回值都要与父类相同!且子类重写方法的访问修饰限定符的权限要求大于或等于父类中的权限!
    条件:继承关系,方法名,参数列表,返回值相同,权限高于或等于父类。

  • 重载对方法的权限不做要求!

访问修饰限定符

java中的字段和方法的四种访问权限

  • public可以在不同包中的类访问!

  • protected不同包中继承关系访问!

  • 默认包访问权限,只能在同一包中的类中访问!

  • privated只能在同一个类中访问

NO 范围 public protected default privated
1 不同包中的非子类 :heavy_check_mark:
2 不同包中的子类 :heavy_check_mark: :heavy_check_mark:
3 同一包中的不同类 :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
4 同一包中的同一类 :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。