方法(函数/过程)
- 封装一段特定的业务逻辑功能
- 方法尽可能的独立,一个方法只干一件事
- 方法可以被反复多次调用
- 减少代码的重复,有利于代码的维护,有利于团队的协作
方法的定义
修饰词 返回值类型 方法名(参数列表){
方法体
}
// 无返回值:void
// 有返回值:返回值类型 方法名
public static void main(String[] args) {
}
public static int getSum(int num1,int num2) {
}
方法的调用
- 无返回值: 方法名(有参传参);
- 有返回值: 数据类型 变量 = 方法名(有参传参);
return
- return 值; //1.结束方法的执行 2.返回结果给调用方
- return; //结束方法的执行
方法的签名
签名–>方法名+参数列表
方法的重载(overload)
- 发生在一个类中,方法名称相同,参数列表不同(参数类型不同),方法体不同
- 编译器在编译时会根据方法的签名自动绑定调用不同的方法
示例:
class Aoo{
void show() {}
void show(int age) {}
void show(String name,int age) {}
void show(int age,String name) {}
//int show() {} 编译错误,重载与返回值类型无关
//void show(int score) {} 编译错误,重载与参数名称无关;方法名+参数类型
}
方法的重写(override)
-
发生在父子类中,方法名称相同,参数列表相同,方法体不同
-
重写方法被调用时,看对象的类型
【重写与重载的区别】
-
重写:发生在父子类中,方法名相同,参数列表相同,方法体不同
(遵循“运行期绑定”,根据对象的类型来调用方法) -
重载:发生在一个类中,方法名相同,参数列表不同,方法体不同
(遵循“编译期绑定”,根据参数的类型来绑定方法) -
cookie(了解):
编译期:.java源文件,经过编译,生成.class字节码文件
--------只检查语法
--------语法没有问题,则生成.class字节码
--------语法出现问题,则编译错误
int a = 5.7;//编译错误运行期:JVM加载.class并运行.class
-------JVM会做内存的分配(堆、栈、方法区)
--------此时有对象了
示例:
package oo.day04;
//重写与重载的区别
public class OverloadOverrideDemo {
/*输出结果如下:
* 超类型参数
* 子类show()方法
*/
public static void main(String[] args) {
Coo coo = new Coo();
Aoo o = new Boo(); //向上造型
coo.test(o); //重载看参数类型,重写看对象类型
}
}
class Coo{
void test(Aoo o) {
System.out.println("超类型参数");
o.show();
}
//重载
void test(Boo o) {
System.out.println("派生类型参数");
o.show();
}
}
class Aoo{
void show() {
System.out.println("父类show()方法");
}
}
class Boo extends Aoo{
//重写
void show() {
System.out.println("子类show()方法");
}
}