前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java学习历程之----提升篇(四)

Java学习历程之----提升篇(四)

作者头像
用户5410712
发布于 2022-06-01 10:19:00
发布于 2022-06-01 10:19:00
26200
代码可运行
举报
文章被收录于专栏:居士说AI居士说AI
运行总次数:0
代码可运行

前言

上周我们学习了如何在子类调用父类的构造方法和父类成员,主要是运用super关键字;大家要记得时常巩固之前所学的内容,只有量的积累,才会有质的飞跃。本周我们来学习Java方法的重载和重写。

一、Java方法的重载

Java允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(Overload),使用方法重载其实就是避免出现繁多的方法名,有些方法的功能是相似的,如果重新建立一个方法,重新取个方法名称,会降低程序可读性。所以我们就可以通过传入参数的不同,去调用不同的方法。接下来我们通过一个具体的例子来看看吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package tisheng4;
public class Overloading {
public void max(int a, int b) {
// 含有两个int类型参数的方法
        System.out.println(a > b ? a : b);//若a>b成立,则返回a,否则返回b,与if...else类似
    }
public void max(double a, double b) {
// 含有两个double类型参数的方法
        System.out.println(a > b ? a : b);
    }
public void max(double a, double b, int c) {
// 含有两个double类型参数和一个int类型参数的方法
double max = (double) (a > b ? a : b);
        System.out.println(c > max ? c : max);
//当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
    }
public static void main(String[] args) {
        Overloading ol = new Overloading();//实例化一个ol对象
        System.out.printf("调用参数均为int型的max方法:");
        ol.max(53, 15);//调用ol对象的max方法,注意参数类型
        System.out.printf("调用参数均为double型的max方法:");
        ol.max(5.132, 5.234);
        System.out.printf("调用三个参数的max方法:");//注意此时输出的c为double型
        ol.max(3.14, 7.32, 8);
    }
}

通过上面的例子,我们看到,变量之间实现的功能类似,但变量数据类型不一致时,我们就可以使用方法的重载,为不同的数据类型变量定制一套方法。

二、Java方法的重写

在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖。当父类中的方法无法满足子类需求或子类具有特有功能的时候,需要方法重写。子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。

2.1 方法重写遵循的规则

  • 参数列表必须完全与被重写的方法参数列表相同;
  • 返回值类型必须小于或者等于父类方法的返回值类型;
  • 访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)。

2.2 方法重写的注意事项

  • 重写的方法可以使用 @Override 注解来标识。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够再次声明。
  • 构造方法不能被重写。
  • 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中时,子类只能重写父类的声明为public和protected的非final方法。
  • 如果不能继承一个方法,则不能重写这个方法。

2.3 我们通过一个例子来看看方法的重写吧,首先定义一个父类People类,并定义getPeople方法,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package tisheng4;

public class People {
    public  String name;
    public String ID;
    public int score;
    public People(String name,String ID,int score){
        this.name=name;
        this.ID=ID;
        this.score=score;
    }
    public  String getPeople(){
        return "我是父类的getPeople方法!";
    }
}

然后定义People的子类Pupil,并在Pupil里重写getPeople方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package tisheng4;

public class Pupil extends People {
    private String gender;
    public Pupil(String name,String gender,String ID,int score){
        super(name,ID,score);//调用父类的构造方法
        this.gender=gender;
    }
    public String getPeople(){//方法的重写,注意与父类方法的区别
        return  "大家好,我叫"+name+",性别"+gender+",学号为:"+ID+",分数为:"+score;
    }
    void display(){
        System.out.println(super.getPeople());//用super关键字调用父类的getPeople方法
    }
    public  static void main(String[] args){
        Pupil student = new Pupil("小圈圈","男","12345",89);//创建Pupil类的对象student
        System.out.println(student.getPeople());
        student.display();
    }
}

运行结果及截图如下:

结语

上周的推文中,在开头处不小心误删了一个“千”字,这周来补上,“千禧难题之七”也算圆满谢幕,上周习题参考答案如期奉上

编辑:玥怡居士|审核:世外居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验