多态和关键字fianl

 

 本章内容(以下代码都在一个类里,上下能读懂):了解多态

多态:指的是同一个方法的调用,由于对象不同可能会有不同的行为。
 *  要点:1.是指方法的多态,不是属性的多态
 *       2.3个必要条件:继承,方法的重写,父类引用指向子类对象
 *       3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,
 *       此时多态就出现了。
 *
 *  对象的转型:向上转型:父类引用指向子类对象,这个就是向上转型,是自动转型。
 *             向下转型:父类转为子类,就是向下转型,是强制转型。

     了解final

final:修饰变量:变常量,就是一旦赋值就不可改变
 *         修饰方法:修饰后该方法不能被重写,但可以被重载
 *         修饰类:修饰的类不能被继承
 */

比如类Math是被final修饰的,不能被继承,一继承就报错:
 

//class Test extends Math{
//    因为Math被final修饰,所以不能被继承
//}

为什么要使用多态?看下面代码

定义一个父类Animal,两个子类继承了父类并重写了父类的方法。

class Animal{
    public void shout(){
        System.out.println("叫一声");
    }
}

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

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

按照以往的思路,我们想调用animal类的方法那么需要new一个类来调用,调用dog,cat类的方法也要new,那么这么很麻烦很繁琐,代码也不简洁,于是有了多态。

那么多态怎么用呢?必须满足三个条件,上面一开始也说了。以上代码已经满足前两个条件:继承,重写父类方法,那么下一步就是要父类引用指向子类对象:这个方法里传了一个animal类型的参数,调用了shout()这个方法

 //下面这个方法可以实现多态,这样就不需要重载方法这么繁琐了
   static void getAnimal(Animal a){
        a.shout();
    }

我们先调用下这个方法,看下结果

调用代码:以下代码中:Animal  dog = new dog();这是因为dog是继承于animal类,按照通俗的话讲,狗也是动物啊。不过这个也涉及到一个转型的问题,子类向父类转型,是向上转型,小范围向大访问转型,是自动的。

    Animal a = new Animal();
        getAnimal(a);//调用了父类的方法
        Animal dog = new Dog();
        getAnimal(dog);//调用了子类dog的方法
        Animal cat = new Cat();
        getAnimal(cat);//调用了子类dog的方法

结果:

    叫一声
    汪汪
    喵喵

那么我们发现,都是调用同一个方法,只是因为传入的参数不同,就发生了不同的行为,这就发生了多态了。

getAinaml(Animal a)这个方法中,参数就是父类引用,那么在调用的时候有时会传入子类的对象,这个就是父类引用指向子类对象,第三个必要条件满足了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值