方法的重载:
方法的重载:是在同一个类中允许同时存在一个以上的同名方法。
方法重载要求:
1. 在同一作用范围内(同一个类,同一个接口)
2. 方法名相同
3. 参数列表不同(参数个数不同、参数类型不同、参数类型顺序不同 )
注意 :方法名相同,形参组成完全相同,返回类型不同不算重载,程序会报错。
构造方法也可以重载。和成员方法的重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new关键字产生对象时,该调用哪个构造方法了。
构造方法是在创建对象时被Java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。
注意:在构造方法中通过this()调用其他构造方法必须将this()放在第一行。
构造方法之间的调用不能形成一个闭环(死循环),必须要有一个缺口
public class Student {
private String name;
private String sex;
private int age;
public Student() {
System.out.println("这是一个无参构造方法");
}
public Student(int age) {
this();
System.out.println("这是一个有一个参数构造方法");
}
public Student(String name,int age) {
this(age);
System.out.println("这是一个有两个参数构造方法");
}
public Student(String name,String address,int age) {
this(name,age);
System.out.println("这是一个有三个参数构造方法");
}
}
方法的重写:
覆盖/重写/覆写:在子类中可以定义和父类中同名的方法,要求方法名相同,参数列表相同,返回值类型相同,访问修饰符不能比父类有着更加严格的要求(私有的除外)
覆盖使得在子类中可以重新定义父类中已有的方法,从而是子类具有自己的行为。
方法重写必须满足如下要求:
重写方法和被重写方法必须具有相同的方法名
重写方法和被重写方法必须具有相同的参数列表
重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类
重写方法的不能缩小被重写方法的访问权限
注意:1.父类中的私有方法是不能进行重写的
2.静态方法不能被重写,final修饰的方法也不同被重写
3.返回值类型可以是被覆盖方法返回类型的子类(返回类型协变)
4.重写后的方法不能比被重写的方法有更严格的访问前提条件,即子类中方法权限必须大于等于父类该方法的权限。
要点:1.在子类中,若要使用父类中被重写的方法,可以使用super关键字进行调用。
2.如果在子类中存在和父类一样同名方法,则优先考虑子类自己的方法
3.@Override:用来验证方法是否是重写的一个注解
4. 实现接口方法,也可称为覆盖(是将空的方法体覆盖为具体的代码)。
class Animal{
public void sleep(){
System.out.println("动物爱睡觉");
}
}
class Dog extends Animal{
public void sleep(){
System.out.println("狗喜欢在白天睡觉");;
}
}
public class Test{
public static void main(String[] args) {
Dog d=new Dog();
d.sleep();
}
}