Java面向对象之多态

1.概念

        通俗来讲,就是有多种形态,完成某个行为,当不同的对象去完成是产生不同的状态就称之为多态.打个比方来说,动物都要吃粮食,对于猫这个对象来说,猫吃的是猫粮,而对于狗这个对象来说,吃的就是狗粮.

2.多态实现的条件

        1.必须是在继承的条件下

        2.子类必须要对父类的方法进行重写

        3.通过父类的引用调用(向上转型)重写的方法

一个小例子体会一下多态的实现:

//定义一个Animal父类
class Animal1 {
    //定义两个成员变量
    public String name;
    public int age;

    //Animal的构造方法
    public Animal1(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //定义 eat()成员方法
    public void eat(){
        System.out.println(name+"吃饭");
    }
}
//定义一个继承Animal1的class dog
class Dog extends Animal1{
    //定义构造方法并且帮助父类构造
    public Dog(String name, int age) {
        super(name, age);
    }
    //重写父类的方法
    @Override
    public void eat() {
        System.out.println(name+"吃狗粮");
    }
}
//定义一个继承Animal1的class cat
class Cat extends Animal1{
    //定义构造方法并且帮助父类构造
    public Cat(String name, int age) {
        super(name, age);
    }
    //重写父类的方法

    @Override
    public void eat() {
        System.out.println(name+"吃猫粮");
    }
}
public class Animal{
    //在此发生了向上转型,用父类的对象来接收,传的是子类的对象
    public static void eat(Animal1 animal1){
        animal1.eat();
    }
    public static void main(String[] args) {
       //实例化两个对象
       Cat cat=new Cat("小猫",10);
       Dog dog=new Dog("小狗",12);
       //调用eat()方法
       eat(cat);
       eat(dog);
    }
}

        到这里可能大家有很多疑问,为什么这就是多态呢??? 请大家看到多态的实现条件,如果还是不理解我给大家画个图理解一下:

多态的实现条件不仅要在继承条件,还要对父类的方法进行重写,现在我们就一起来看看重写.

3.重写

  定义:是子类对父类非静态,非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和参数都不能改变.简单来说就是外壳不变,核心重写.

  重写的规则:

  1. 子类在重写父类的方法时,一般要于父类的方法原型一致:返回值类型,方法名,参数列表要完全一致.
  2. 被重写的方法返回值类型可以不同,但必须有父子关系.
  3. 访问权限不能比父类中被重写的方法的访问权限更低.
  4. 方法的重写可以使用注解来帮我们校验

 前段时间我们还学习了方法的重载,大家私下可以去对比一下方法的重载与重写的区别

       在重写这一块,我们还需要了解一下静态绑定和动态绑定.

             静态绑定:也叫做早期绑定,在编译时,根据用户所传递类型就确定了具体调用了那个方法.典型代表方法重载.

             动态绑定:也叫做后期绑定,在编译时,不能确定方法的行为,需要等到程序的运行时,才能确定具体调用那个类的方法.

多态的实现条件不仅要在继承条件,还要对父类的方法进行重写,然后还需要用父类的引用调用(向上转型)重写方法.

4.向上转型

        定义:就是创建一个子类对象,将其当成父类对象来使用

        语法格式:

 发生向上转型的三种方式:

  1.直接赋值:子类对象赋值给父类对象

 2.方法传参: 形参作为父类的引用,可以接收任意子类的对象

3.作为返回值:返回任意子类对象 

尽管用的很多向上转型,肯定是有一些优点的,但不免也会有缺陷.向上转型的优点是让代码实现更简单灵活.

缺陷是不能调用子类特有的方法. 

 5.多态的优缺点

         优点:1 .类调用者对类的使用成本进一步降低。

                 2 .可扩展能力更强

        缺点:代码的运行效率降低`

以上就是我对多态的理解,希望对大家有所帮助,如有错误希望大家帮忙指出.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值