重写(比如子类重写父类方法)
声明不变,方法重写
注意事项
- **使用@Override注解,**帮助检查方法重写的格式是否正确,提高代码可读性
- private,static方法不能重写
- 子类重写方法时,访问权限大于等于父类方法访问权限,返回值范围小于等于父类方法返回值
重载(比如同一个类中的构造方法)
可以同名,但参数列表不能相同(有参无参构造)
构造器
子类的全部构造器都会先调用父类的构造器,再执行自己的。
父类构造器 super();
- 默认情况下,子类全部构造器的第一行代码都是super();(写不写都有),它都会调用父类的无参构造器
- 如果父类没有无参构造器(有 有参构造器,就不会自动生成无参构造器),那我们必须在子类构造器的第一行手写super(…),指定去调用父类的有参构造器。
代码
People.java
/**
* @Author: ggdpzhk
* @CreateTime: 2024-08-10
*/
public class People {
private String name;
private int age;
public People() {
}
public People(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Student.java
/**
* @Author: ggdpzhk
* @CreateTime: 2024-08-10
*/
public class Student extends People{
private String school;
public Student()
{
super();
System.out.println("Student()");
}
//这个方法很巧妙,当不写学校时,赋值默认学校
public Student(String name, int age)
{
//子类构造方法第一行都是super,父类的构造方法
super(name, age);
this.school = "b站大学";
}
public Student(String name, int age, String school)
{
super(name, age);
this.school = school;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
@Override
public String toString() {
return "Student{" +
"school='" + school + '\'' +
"name='" + this.getName()+ '\'' +
", age=" + this.getAge() +
'}';
}
public static void main(String[] args) {
Student student = new Student("张三", 18);
System.out.println(student.toString());
}
}