多态的理解

1.什么是多态

        同一方法可以根据发送对象的不同,采用多种不同的行为方式。

        一种对象的实际类型是确定的。但是可以指向对象的引用的类型有很多。

2.多态的条件

  • 存在继承关系
  • 方法需要重写
  • 父类引用指向子类对象

3.多态的理解

        父类的引用指向子类的对象。需要注意的是,虽然指向的是子类的对象,但是如果出现子类存在,但父类不存在的方法,该对象是没有办法实现的。具体如下:

        假设有三个类,分别为Animal类,Dog类,Cat类。后两类均继承Animal类。假设shout(叫喊)是所有动物都会的行为。

class Animal {//动物类
    public void shout(){
        System.out.println("动物可以叫");
    }
}
class Cat extends Animal{//猫类
    @Override
    public void shout() {
        System.out.println("喵喵喵");
    }

    public void sticky() {
        System.out.println("猫会粘人");
    }
}

class Dog extends Animal{//狗类

    @Override
    public void shout() {
        System.out.println("汪汪汪");
    }
}
public class demo {
    public static void main(String[] args) {
        Animal cat = new Cat();//父类的引用指向子类的对象(Cat子类)
        Animal dog = new Dog();//父类的引用指向子类的对象(Dog子类)

        //cat.sticky();  会报错

        cat.shout();//喵喵喵
       
        dog.shout(); //汪汪汪
        //同一类对象实现同名方法,出现不同的结果。
        
    }
}

        当对象cat实现Cat类的sticky方法时,程序报错。

         多态的好处在于,使得同名方法需求不同同一类的对象可以实现方法名相同但是具体的内容却不相同的情况。

4.为什么会有这样的效果呢? 

Animal cat;//声明
Animal dog;//声明

        当我们声明一个对象时,是存在栈里面的。它决定了这个对象会有哪些方法。比如声明一个Animal(动物)类的对象cat,只在栈里面存的是指向cat的引用(也就是地址)。因此,只声明了Animal的方法,并没有声明到Cat的所有方法。

cat = new Cat();实例化
dog = new Dog();

        当我们实例化这个类时,也就new这个类后,在堆中开辟出来一个Cat类的内容。但是由于上述栈中只有Animal的方法,因此,cat对象不能使用Animal类有的,但是Cat类独有的方法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值