##多态
1、方法的重写
当从父类中继承下来的方法不足以满足子类的需求时,则需要在子类中重写一个与父类一模一样的方法(方法
名相同、参数列表相同、返回值类型相同),这叫做方法的重写或覆盖。
首先写一个Person父类:
package com.duotai;
public class Person {
private String name;//private修饰不能直接用类名调用,可以通过public类型的get()和set()方法实现对属性的访问
public int age;//用public修饰调用时可以直接用类名调用
private String sex;
public void work(){
System.out.println(getName()+getAge()+getSex()+"上班");
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Person(){//无参构造
}
public Person(String name,int age,String sex){//有参构造
this.name=name;
this.age=age;
this.sex=sex;
}
}
再写一个Student子类
package com.duotai;
public class Student extends Person{
public Student(){super();}//生成无参构造方法
public Student(String name,int age,String sex){
super(name,age,sex);
}
public void work(){//重写父类方法
super.work();
System.out.println(getName()+getAge()+getSex()+"看书");
System.out.println(getName()+getAge()+getSex()+"写字");
System.out.println(getName()+getAge()+getSex()+"上班");
}/*super不是必需的没有super也能运行,也可以直接写@override,此时参数列表相同,super必须要用的地方是当子类要访问父类中的某个属性时,在构造方法中用使用super,但也不是必须,系统会自动调用super*/
}
Test测试类
package com.duotai;
public class Test {
public static void main(String[] args){
Person person=new Person("张三",20,"男");
person.work();
person.age=20;
Student student=new Student("李四",15,"男");
student.work();
}
}
方法重写的意义及用法
子类重写父类的方法后,调用的不再是父类中的方法,而是调用子类重写后的方法
子类重写父类方法时使用的权限修饰符要大于等于父类方法中使用的权限修饰符
重写与重载的区别:
重写发生在父子类中,方法名称相同,参数列表相同,方法体不同,遵循“运行期”绑定,方法的执行取决于有没有子类有没有重写这个方法,有,调用子类,没有,调用父类,如果父类中没有这个方法编译错误(动态绑定)
重载发生在同一类中,方法名称相同,参数列表不同,方法体不同,遵循“编译期”绑定,(静态绑定)