Java学习笔记之多态

复习了一下Java中的多态,以下这段文字是我摘抄的对多态的解释:

当一个类有很多子类时,并且这些子类都重写了父类中的某个实例方法,那么当我们把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转型对象在调用这个实例方法时就可能具有多种形态,因为不同的子类在重写父类的实例方法时可能产生不同的行为。

多态性就是指父类的某个实例方法被其子类重写时,可以各自产生自己的功能行为。

读起来有点拗口也不是很好理解,所以我弄了一个实例来帮助自己消化吸收。猫、狗和鸟都是不同的动物,它们都需要吃东西,但是吃的东西各有不同。所以创建一个父类为Animal,里面有一个eat()方法,然后再创建三个子类Dog、Cat和Bird,三个子类继承父类后就可以重写父类的eat()方法去吃东西了。

1.创建父类Animal

代码如下:

public class Animal {
    public void eat(){
    }
}

2.创建三个不同的子类

三个子类都重写了父类Animal的eat()方法。

Cat.java

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼。");
    }

}

Dog.java

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

Bird.java

public class Bird extends Animal{
    @Override
    public void eat() {
        System.out.println("鸟吃虫。");
    }
}

这三个子类的代码大同小异,都是继承父类Animal并重写了eat()方法。

3. 创建一个有main()方法的主类来运行程序

先看具体的代码和打印结果,后面再解释。

public class Test {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
        animal = new Dog();
        animal.eat();
        animal = new Bird();
        animal.eat();
    }
}

打印结果

猫吃鱼。
狗吃肉。
鸟吃虫。

好,现在我们来结合前面对多态进行解释的文字来分析一下主类中的代码。首先创建一个父类Animal的对象animal,然后让子类Cat创建的对象的引用指向它,这就是Animal animal = new Cat();的意义。要注意的是这里一定要分清对象和对象的引用。这样我们就得到了一个向上转型(子类转父类)的Cat的对象,通过它,我们就可以调用子类Cat中的eat()方法。从打印结果可以看到第一行就是它打印出来的“猫吃鱼”。

接下来也不难理解了,我们分别创建了子类Dog和Bird的对象的引用,并且都放在父类的对象animal中。跟前面唯一不同的是不再创建父类Animal的对象了。也就是说,类Test中我们只有一个父类Animal的对象,而三个子类的对象的引用都是依次放在这个animal中的。从这里我们就可以看到,子类重写父类的eat()方法时打印出了三种不同的结果,即父类的方法具有了多种形态,这就是多态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值