01 方法重写
-
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但是不能缩小(public>Protected>Default>private)
- 抛出的异常:范围可以缩小但是不能扩大
- 快捷键:Alt+Insert(override)
-
为什么需要重写:因为父类的功能,子类不一定需要,或者不一定满足
-
静态的方法和非静态方法差别很大:
- 静态方法:方法的调用只和左边定义的数据类型有关
public class Person { public static void print(){ System.out.println("Person"); } } public class Student extends Person { public static void print(){ System.out.println("Student"); } } public class Application { public static void main(String[] args) { Student student = new Student(); student.print();//Student //父类的引用指向了子类 Person person = new Student(); person.print();//Person } }
- 非静态方法:重写
public class Person {
public void print(){
System.out.println("Person");
}
}
public class Student extends Person {
public void print(){
System.out.println("Student");
}
}
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.print();//Student
//父类的引用指向了子类
Person person = new Student();
person.print();//Student
}
}
02 多态
多态就是同一方法可以根据发送对象的不同而采用多种不同的行为方式。
-
多态注意事项:
- 多态时方法的多态,属性没有多态
- 存在条件:继承关系,方法需要重写,父亲引用指向子类对象
-
不能重写的方法:
- static方法属于类不属于实例
- final常量
- private方法
public class Person {
public void print(){
System.out.println("Person");
}
}
public class Student extends Person {
public void print(){
System.out.println("Student");
}
}
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的-->new Student(); new Person()
//可以指向的引用类型就不确定了:父类的引用指向子类
//Student能调用的方法都是自己的或者继承父类的
Student student = new Student();
student.print();//Student
//Person父类型可以指向子类,但是不能调用子类独有的方法
Person person = new Student();
person.print();//Student
}
}