方法重写
实现情况:
当从父类继承的方法不能满足子类的需要时,可以在子类中对这一方法进行重写(覆盖),以符合需求。
满足的要求:
重写方法和被重写的方法必须具有相同的方法名;
重写方法和被重写方法参数列表相同;
重写方法的返回值类型和父类的返回值类型是同类或者是子类;
重写方法不能缩小被重写方法的访问权限,
代码实例:
public class Department {
private int ID;//部门编号
private String name = "待定";//部门名称
private int amount=0;//部门人数
private String reponsibility = "待定";//部门职责
private String manager = "无名氏";//部门经理
//省略构造方法和setter/getter()方法等代码块.....
public void printDetail() {
System.out.println("部门:"+this.name+",经理:"+manager+",部门职责:"+reponsibility+
",部门人数:"+amount);
}
子类:
public class PersonDept extends Department{//人事部
private int count;//本月计划招聘人数
public PersonDept(String name, String manager, String responsiblity, int count) {
super(name, manager, responsiblity);
this.count=count;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public void printDetail() {
super.printDetail();
System.out.println("本月计划招聘人数是:"+this.count);
}
}
在父类中,我们有了PrintDetail()方法,但是在子类中有自己特有的count属性,在父类中无法通过PrintDetail()方法展现出来,满足不了子类的需要,这时候我们就需要对方法进行重写。重写一个和父类方法名相同,参数列表相同的方法。通过super()访问父类原先的方法,在打印子类特有的方法。
输出结果:
public class Test {
public static void main(String[] args) {
PersonDept pd = new PersonDept("人事部", "王经理", "人才招聘和管理", 10);
pd.printDetail();
}
}
在运行测试时我们只需要打印一个printDetail()就可以直接得出结果,这里没有设置部门人数,所以默认是0.
多态
多态就是指同一个行为具有不同的表现能力。例如一个主人带自己的宠物去看病。对主人而言,不论是带狗狗去看病还是带猫咪去看病,其实都是带宠物去看病,这是一种行为。但是在实际生活中其实并不完全如此。如果只是单纯的说是带宠物去看病,别人就无法详细了解到到底是狗要去看病还是猫要去看病。这时,我们就可以在“狗”类和“猫”类下定义一个自己特有的方法。当主人要带宠物去看病时,显示出到底是带谁去看病。
代码实现:
宠物类是父类:
public class Pet {
public void toHospital() {
System.out.println("宠物看病!");
}
}
Dog类继承Pet类,重写toHospital();
public class Dog extends Pet {
public void toHospital() {
System.out.println("狗狗看病");
}
猫咪同样如此
public class Cat extends Pet {
public void toHospital() {
System.out.println("猫咪看病");
}
}
在测试中输出结果:
public class Test {
public static void main(String[] args) {
Dog dog=new Dog();
dog.toHospital();
Cat cat = new Cat();
cat.toHospital();
多态的应用:
多态对已存在的代码具有可替代性;
多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性;
多态在应用中体现了灵活多样的操作,提高了使用效率。简化了代码的编写和修改过程。