持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解java实现单链表,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
文章目录
重写(OverWrite)
方法重写又叫做方法覆盖:
1、什么时候我们会考虑使用“方法覆盖”呢?(使用时机)
子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,
子类有权利对这个方法进行重新编写,有必要进行“方法的覆盖”。
2、当子类对父类继承过来的方法进行“方法覆盖”之后,
子类对象调用该方法的时候,一定执行覆盖之后的方法。(就近原则)
3、怎么构成方法覆盖?
a):两个类必须要有继承关系。
b):重写之后的方法和之前的方法具有:
相同的返回值类型、
相同的方法名、
相同的形式参数列表。
4、方法覆盖应该注意的几点:
a):方法覆盖只是针对于方法,和属性无关。
b):由private或则final修饰方法都不能被覆盖(不能被继承)
c):方法覆盖只是针对于“实例方法”,因为“静态方法覆盖”没有意义。
d):重写方法的返回值,可以缩小返回类型范围,但是不能增加返回类型范围
e):访问权限不能更低,可以更高。
f):重写之后的方法不能比之前的方法抛出更多的异常,可以更少。
例子:
public class OverWriteTest {
public static void main(String[] args) {
//创建一个父类对象并自我介绍
Player player = new Player();
player.selfIntroduction();
//创建一个篮球运动员对象并进行自我介绍
Player basketballPlayer = new BasketballPlayer();
basketballPlayer.selfIntroduction();
}
}
/**
* 定义一个父类:运动员
* 方法:自我介绍
* */
class Player {
public void selfIntroduction(){
System.out.println("我是一个运动员!");
}
}
/**
* 定义一个子类继承运动员
* */
class BasketballPlayer extends Player{
/*
* 虽然篮球运动员也是一个运动员
* 但是我希望在进行自我介绍的时候
* 突出自己的职业:篮球
* 此时继承过来父类的方法已经无法满足需求,需要进行改进(重写)
* */
@Override
public void selfIntroduction() {
//在继承的时候,会默认通过super. 来调用父类的方法
//super.selfIntroduction();
//重写父类方法
System.out.println("我是一个篮球运动员!");
}
}
重载(Overlord)
怎么构成方法重载?
1、在同一个类中
2、方法名相同
3、参数列表不同
参数个数不同、 参数类型不同、参数顺序不同
'与方法的返回值类型无关'
'与方法法的饰符列表无关'
使用时机:
在一个类当中,如果几个方法功能相似的话,建议将名字定义为一致
这样代码美观,可读性强,见名知意
比如:System.out.println();就是最常见一个重载方法
例子:
public class OverLoadTest {
public static void main(String[] args) {
//调用同名不同参数的方法
mySum();
mySum(12);
mySum(1.2);
mySum(12,1.20);
mySum(1.20,12);
}
private static void mySum() {
System.out.println("mySum无参数的执行!");
}
// 这个方法的参数个数和上面的方法的参数个数不同——>构成重载
public static void mySum(Integer num){
System.out.println("mySum有一个Integer类型的参数执行!");
}
/**
* 注意这类错误,这不构成方法重载,这是重复啦!变量名不同不构成重载!!!
* */
/*
public static void mySum(Integer num){
System.out.println("mySum有一个Integer类型的参数执行!");
}
*/
/**
* 注意这类错误,这不构成方法重载,这是重复啦!返回值类型不同不构成重载!!!
* */
/*
public static Integer mySum(Integer num){
return 1;
}
*/
/**
* 注意这类错误,这不构成方法重载,这是重复啦!修饰符类型不同不构成重载!!!
* */
/*
int mySum(Integer num){
return 1;
}
*/
// 这个方法的参数个数和上面的方法的参数类型不同——>构成重载
public static void mySum(Double num){
System.out.println("mySum有一个Double类型的参数执行!");
}
//这个和上面的两个参数个数都不同-->构成重载
public static void mySum(Integer num1, Double num2){
System.out.println("MySum有两个不同类型的参数(Integer x, Double y)");
}
// 注意:参数的顺序不同,也算不同,依旧-->构成重载
public static void mySum(Double num1, Integer num2){
System.out.println("MySum有两个不同类型的参数(Double num1, Integer num2)");
}
}
class Test{
/**
* 这构成重载了吗?
* 不构成,因为根本不在同一个类里面
* */
public static void mySum(Double num1, Integer num2){
System.out.println("MySum有两个不同类型的参数(Double num1, Integer num2)");
}
}
运行截图
重载与重写的区别
方法的重载和重写都是实现多态的方式,最主要的区别在于
'前者实现的是编译时的多态,而后者实现的是运行时的多态'
重载发生在一个类中;重写发生在有继承关系的类中(子类与父类之间)。
🤡写在最后
关于重写与重载的去呗就讲到这里 最后别忘啦支持一下博主哦,求三连!❤️❤️❤️