目录 复制
方法的重载:
一个类中定义的方法,是允许重载的( 相同的方法名称 ).
当类有多个同名的方法时,方法会对输入类型数据按创建方法时的参数类型进行对比,输出两者类型一样的方法返回值
最有体现力的就是无参构造方法和有参构造方法
public class Person{
private String name;
private String age;
//三种构造方法
public Person() {}
public Person(String name) {
this.name = name;
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public static void main(String[] args){
/*
*这里的p1在创建过程中因为没有输入参数,
*在调用构造函数时选对三种构造方法进行对比,然后选取了参数类型是无参的构造方法
*p2一样,因为传入的参数只有一个,所以没有调用无参构造方法和两参构造方法
*p3也因为是传入了两个参数,所以调用了两参的构造方法
*/
Person p1 = new Person();
Person p2 = new Person("文西");
Person p3 = new Person("古晶","28");
限制条件
- 方法名称相同
- 参数列表长度 或 参数列表类型 或参数顺序不同
★与返回值类型无关
重写:
当我们想调用子类与父类名字相同但内容不同的方法时,就会使用方法的重写(@Override)
规则:
1、参数列表必须完全与被重写方法的相同
2、返回类型必须完全与被重写方法的返回类型相同
3、访问权限不能比父类中被重写的方法权限低
4、声明为static和private的方法不能被重写,但能被再次声明
★任何一点不满足都会返回使用父类的方法
★重写与重载的区别:
重写(Override)是发生在子父类中的方法覆盖
重载(Overload)是发生在一类中的方法覆盖(例如:一个类里面有多个名称相同但参数类型长度不同方法,这时我们需要方法的重载,使用与输入数据类型以的方法)
它们之间的区别:
1、发生的位置
重载:发生在一个类中
重写:发生在子父类中
2、参数列表限制
重载:必须不同
重写:必须相同
3、返回值类型
重载:与返回值无关
重写:返回值类型必须一致
4、访问权限:
重载:与访问权限无关
重写:子类的方法权限不能小于父类的方法权限
5、异常处理
重载:与异常无关
重写:异常范围可以更小,但是不能抛出新的异常
重写演示:
public class GG {
public static void main(String[] args) {
Student s = new Student();
s.say();
}
}
class Person{ //父类
String name;
String age;
public Person() {}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public void say() {
System.out.println("爸爸");
}
}
class Student extends Person{ //继承
@Override
public void say() {
System.out.println("儿子");
}
}
运行结果
这里我们发现虽然Student类虽然继承了Person的say方法,但是实际上运行的是自己的say方法