面向对象编程——重写和多态

向上转型和向下转型

向上转型和向下转型是认识多态的基础
向上转型:对于一对父子关系的类,假如用父类的引用类型去接收子类的的引用称为向上转型
向下转型:对于一对父子关系的类,假如用子类的引用类型去接收父类的的引用称为向上转型
对于赋值的场景可以有以下三个:

  1. 直接赋值
  2. 方法传参
  3. 方法返回值

instanceof关键字

在使用向下转型的时候会有不安全的隐患,比如下面的代码

class Animal {
    public void eat() {
        System.out.println("Animal.eat()");
    }
}

class Dog extends Animal {
    public void eat() {
        System.out.println("Dog.eat()");
    }
}

class Cat extends Animal {
    public void eat() {
        System.out.println("Cat.eat()");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        Animal animal = dog;  
        // Cat cat2 = (Cat) animal;  // 这一行代码报错;因为animal是Dog类的引用,不能强转成Cat
        
		if (animal instanceof Cat) {
            Cat cat2 = (Cat) animal;
        }
    }
}

这个时候可以使用instanceof关键字,判断当前变量的引用是否和需要强转的类一致;可以避免向下转型的错误。

重写

重写是发生在继承关系中,在子类中重写父类相同的成员方法;以达到多态的目的

重写的三个要求:

  1. 方法名必须相同
  2. 参数列表必须相同(类型、个数、顺序)
  3. 返回值必须相同(也可以是构成父子关系,也称为协变

重写的注意事项:
4. 被 private、static、final 修饰的方法不能重写
5. 子类的访问权限修饰符的权限必须大于等于父类的(private < 默认权限 < protected < public)
6. 构造方法不能发生重写

多态

多态的产生主要是为了降低代码的重复性,避免使用大量的 if - else;在修改的时候也更加方便。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值