学习并了解面向对象三大特性之——多态

面向对象三大特性:

面向对象三大特性分别是封装、继承和多态。今天我们来聊的是多态。如果对于前面继承的特性还不熟悉,需要先把继承相关知识学好再来学习多态;

一、多态的使用前提:
  • 1.要有继承关系
  • 2.要有方法的重写
为了便于理解,所以按照本人的习惯,先上代码:

子类继承父类代码:

package com.itheima.demo01多态介绍;
// 动物(父类)
public class Animal {
    public void eat() {
        System.out.println("动物在吃");
    }
}

// 猫(子类)
class Cat extends Animal {
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

// 狗(子类)
class Dog extends Animal {
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

测试类代码:

public class Demo01 {
    public static void main(String[] args) {
        // 之前的使用: 类名 对象名 = new 类名();
        // 这个格式,右边不能切换
        Cat c = new Cat();
        c.eat();

        Dog d = new Dog();
        d.eat();

        // 多态:父类 变量名 = new 子类();
        // 多态会走右边的子类方法
        Animal a1 = new Dog();
        a1.eat(); // 猫吃鱼/狗吃骨头
    }
}

运行结果;
在这里插入图片描述
由以上代码,大家已经了解到了多态的表达方法;当然还有其他的多态表达形式,形式都大同小异。比如:

  • 接口 变量名 = new 实现类();
  • 抽象父类 变量名 = new 子类();
    使用过程中应该注意到一点,他和我们曾经学过的基本数据类型转换其实很相似。在此过程中其实并没有产生新的对象,地址依旧是指向子类的(记住口诀:编译看左边,运行看右边),这点必须要注意。
二、多态的作用:
多态的好处:
   调用方法的时候形成多态,方法的参数写父类,调用时可以传入任意的子类,提高代码扩展性。

我们单独这样讲其实大家比较难理解,还是直接上代码:

子类继承父类代码:

// 人类(父类)
public abstract class Person {
    public abstract void eat();
}

// 学生(子类)
class Student extends Person {
    @Override
    public void eat() {
        System.out.println("学生一边吃饭,一边学习");
    }
}

// 老师(子类)
class Teacher extends Person {
    @Override
    public void eat() {
        System.out.println("老师一边吃饭,一边备课");
    }
}

// 工人(子类)
class Worker extends Person {
    @Override
    public void eat() {
        System.out.println("工人一边吃饭,一边搬砖");
    }
}

测试类代码:

public class Demo022 {
    public static void main(String[] args) {
        // 测试一:创建学生和老师
        Student s = new Student();
        Teacher t = new Teacher();
        Worker w = new Worker();

        kaiFan(s);
        kaiFan(t);
        kaiFan(w);

        System.out.println("---------------------");
        //测试二:
        Person s1 = new Student();
        Person t2 = new Teacher();
        Person w3 = new Worker();

        kaiFan(s1);
        kaiFan(t2);
        kaiFan(w3);

    }

    // 不用管具体的子类,给父类                       父类  变量名 = new 子类();   多态
    // kaiFan(s);               Person obj = s;     Person obj = new Student();
    // kaiFan(t);               Person obj = t;     Person obj = new Teacher();
    public static void kaiFan(Person obj) {
        obj.eat(); // 多态执行右边子类方法
    }

    // 模拟餐厅的开饭功能(这种方案相当于专用窗口,要写很多重载的方法)
    //                          Student obj = s;     Student obj = new Student();
/*    public static void kaiFan(Student obj) {

    }

    // kaiFan(t);               Teacher obj = t;    Teacher obj = new Teacher();
    public static void kaiFan(Teacher obj) {

    }
    */
}

运行结果:
在这里插入图片描述
我们主要看测试类中的kaiFan(Person obj)方法,我们首先来复习一下实参和形参的概念,再来看,其实测试一和测试二结果都是一样的。由于kaiFan(Person obj)方法中的形参是Person类型,最终实参给他赋值的时候还是会形成多态。

下面我们来看看为什么要在测试类中单独搞一个方法,而不是利用对象直接调用方法。

原因:

单从以上代码,可能觉得实现上面的功能,用对象调取也一样只需要一行代码。但是,如实在子类中重写的很多个方法呢?这时,我们就需要多次利用对象调取,而正是这个时候才体现多态好处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java面向对象三大特性是封装、继承和多。封装是指将实现细节从接口中隐藏起来,使客户端无需关心实现细节,只需要调用接口即可。继承是指子类可以继承父类的属性和方法,使子类可以共享父类的属性和方法,从而实现代码的复用。多是指同一操作作用于不同的对象,可以有不同的解释,从而实现不同的功能。 ### 回答2: Java面向对象三大特性是封装、继承和多。 封装是指将数据和对该数据的操作方法封装在一个类中,通过访问权限修饰符对数据进行限制,从而隐藏数据的具体实现细节,仅对外提供必要的接口,保证数据的安全性和一致性。通过封装可以提高代码的复用性和可维护性,降低耦合性。 继承是一种基于现有类创建新类的机制,通过使用已有类的属性和方法,实现代码的重用。在Java中,通过使用extends关键字可以实现类的继承,子类可以继承父类的公共属性和方法,并且可以在继承的基础上进行扩展和重写。继承可以提高代码的可复用性和可扩展性,减少代码的冗余和重复。 多是指同一类型的对象在不同的情况下表现出不同的行为。在Java中,通过继承和方法重写的方式实现多。父类类型的引用变量可以引用子类类型的对象,从而可以根据不同的对象类型调用相应的方法。通过多机制,可以提高代码的灵活性和可扩展性,增加代码的可读性。 这三个特性相互配合,可以使得Java面向对象的程序具有高内聚、低耦合的特点。封装保证了数据的隐藏和安全性,继承提供了代码的重用和扩展性,而多则实现不同对象类型的统一处理。面向对象三大特性是Java中重要的编程思想,对于代码的设计和开发具有重要意义。 ### 回答3: Java面向对象的三个特性分别是封装、继承和多。 首先,封装是指将数据和方法封装在一个类中,对外只暴露必要的接口,隐藏了其具体的实现细节。通过封装,可以提高代码的可维护性和安全性,同时也减少了代码的耦合性,提高了代码的复用性。 其次,继承是指一个对象可以直接拥有另一个对象的属性和方法。通过继承,一个类可以继承另一个类的属性和方法,从而减少了代码的重复性,提高了代码的复用性。同时,继承也能够实现多,允许将子类的对象赋值给父类的变量,实现了类之间的替换和扩展。 最后,多是指一个对象可以具有多种形。在Java中,多通过程序的运行时动绑定实现。多有助于提高代码的灵活性和可扩展性。通过多,可以编写通用的代码,使得程序可以处理不同类型的对象,从而提高了代码的可复用性和可维护性。 总的来说,Java面向对象三大特性——封装、继承和多,分别通过对数据和方法的封装、层次化结构的继承和运行时动绑定的多实现了代码的封装性、代码的复用性和代码的灵活性。这些特性使得Java成为一种非常强大的面向对象编程语言。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值