JAVASE学习笔记-12(多态)

含义:

主要是使用重写的方法,子类赋值给父类对象

用法:

Test1.java

public class Test1 {
    public static void main(String[] args) {
        //常规方式
        Dog dog = new Dog();
        dog.eat();
        dog.lookDoor();

        Cat cat = new Cat();
        cat.eat();
        cat.catchMouse();

        //多态方式
        
        Animal animal = new Dog();
        animal.eat();
//        animal.lookDoor(); //报错,不能调用子类独有的方法
        Animal animal2 = new Cat();
    }
}

其他 Animal.java Dog.java Cat.java

//Animal.java
public abstract class Animal {
    public abstract void eat();
}

//Cat.java
public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃饭");
    }
    //特有方法
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

//Dog.java
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃饭");
    }

    //特有方法
    public void lookDoor(){
        System.out.println("狗看门");
    }
}

优缺点:

原始方式:

优点:能调用重写,调用父类非私有,能调自己特有的

缺点:扩展性差

多态:

优点:扩展性好

缺点:不能调用子类特有的

//比如定义一个方法


Animal animal = new Dog();
Animal animal2 = new Cat();
Animal animal3 = new Bee();

//new多个只需要一个方法即可处理
function1(animal);
function1(animal1);
function1(animal2);

public static function1(Animal animal){
}


//如果用原始方法
public static function1(Dog dog){
}
//那么每次new一个对象,可能就需要重写一个方法出来,扩展性很差

多态转型:

//多态的向上转型
//把Dog类转换为Animal
Animal animal = new Dog();

//多态的向下转型
Dog dog = (Dog)animal;
//就可以使用子类的特有功能

注意:可能会出现类型转换异常(ClassCastException)

向下转型的时候可能出现两边类型不一致!

解决:在向下转型之前,先判断类型

if(animal instanceof Dog){
    Dog dog = (Dog) animal;
}
if(animal instanceof Cat){
    Cat cat = (Cat) animal;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值