方法重写与多态

方法重写

实现情况:

当从父类继承的方法不能满足子类的需要时,可以在子类中对这一方法进行重写(覆盖),以符合需求。

满足的要求:

重写方法和被重写的方法必须具有相同的方法名;
重写方法和被重写方法参数列表相同;
重写方法的返回值类型和父类的返回值类型是同类或者是子类;
重写方法不能缩小被重写方法的访问权限,

代码实例:

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();

在这里插入图片描述

多态的应用:

多态对已存在的代码具有可替代性;
多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性;
多态在应用中体现了灵活多样的操作,提高了使用效率。简化了代码的编写和修改过程。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值