public class Extends {
public static void main(String[] args) {
Student student = new Student();
student.test(); // Student
// 当此方法为类方法时,调用的方法与左边类对齐
Person person = new Student(); // 父类的引用person指向了子类
person.test(); // Person
}
}
class Person{
private String name;
public static void test(){
System.out.println("Person调用了test方法");
}
}
class Student extends Person{
public static void test(){
System.out.println("Studnet调用了test方法");
}
}
输出结果如下:
当将test方法前的static去掉时:
// 重写都是方法的重写与属性无关
public class Extends {
public static void main(String[] args) {
Student student = new Student();
student.test();
Person person = new Student();
person.test(); // 子类重写了父类的方法
}
}
class Person{
private String name;
public void test(){
System.out.println("Person调用了test方法");
}
}
class Student extends Person{
@Override // 注解:有功能的注释,这个标识了方法的重写
public void test(){
System.out.println("Student调用了test方法");
}
}
运行结果如下:
重写:需要继承关系,子类重写父类方法
特点:1. 方法名必须相同,方法体不同
2. 参数列表必须需相同(否则变成重载)
3. 修饰符:范围只可以扩大或不变(public>protected>default>private)
4. 抛出的异常:范围可以缩小但是不可以扩大(eg:ClassNotFoundException(小)–>Exception(大))
为什么需要重写:
- 父类的功能子类不一定需要或者满足
Alt + Insert;快捷键选择override,快速的进行重写