重载和重写
什么是方法重载?
发生在同一个类中,方法名必须相同,参数类型不同,参数数量不同,发生在编译时候。 实验理论:在一个类中,方法名称相同时,编译器会根据调用方法的参数数量,参数类型去逐个匹配,用来选择对应的方法。
代码示例:
package com.kuang.dao;
public class Demo01 {
public static void main(String[] args) {
double max = max(10.0,20.0);
System.out.println(max);
}
public static int max(int num1,int num2){
int result=0;
if(num1==num2){
System.out.println("num1==num2");
return 0; //中止方法
}
if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
public static double max(double num1,double num2){
double result=0;
if(num1==num2){
System.out.println("num1==num2");
return 0; //中止方法
}
if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
}
方法重载的好处?
只需要记住一个方法,就可以实现类似的功能。
什么是方法重写?
发生在父子类中,方法名,参数列表必须相同,返回值范围小于等于父类,抛出的异常范围子类小于等于父类,访问修饰符范围大于等于父类; ClassNotFoundException -->Exception(大)
如果父类方法访问修饰符为private则子类就不能重写该方法。public>protected>DeFAULT>Private
重写:子类的方法和父类必须一致。
方法重写的好处?
因为你还没有用到抽象类,所以无法理解重写的作用。
比如,现在有一个父类P,它有N多个子类S1,S2,S3...
在某一种情况下,你根本就不知道是哪个子类在执行,有些情况下也不必知道。但是只知道这些子类都有父类的一个方法m(),这时候,你可以通过将一个变量声明为P,但是实际却是S1。
如,P s = new S1(); s.m();这时候实际执行的是子类的方法体,而不是父类的方法体。
这也是接口的作用,也是很多时候所说的面向接口编程。
比如,现在有一个父类P,它有N多个子类S1,S2,S3...
在某一种情况下,你根本就不知道是哪个子类在执行,有些情况下也不必知道。但是只知道这些子类都有父类的一个方法m(),这时候,你可以通过将一个变量声明为P,但是实际却是S1。
如,P s = new S1(); s.m();这时候实际执行的是子类的方法体,而不是父类的方法体。
这也是接口的作用,也是很多时候所说的面向接口编程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通