首页 > 其他分享 >何为多态——和抽象又有什么关系

何为多态——和抽象又有什么关系

时间:2023-07-30 15:34:05浏览次数:34  
标签:animal 何为 多态 Tiger Lion 抽象 Animal testAnimal

到底什么是多态? 面向对象三大特征:封装、继承、多态 前面两个应该比较好理解,顾名思义,那最后这个多态到底是什么? 我最近也看了一些相关的文章,但是可能因为水平尚浅,不是很能理解 所以想自己总结一下,不一定完全正确,欢迎大家提出意见

我认为多态这两个字,可以解释为 多个形态 多态其实是建立在封装与继承的基础之上的,尤其是继承 我们首先创建一个动物类,因为动物需要吃饭,喝水 所以我们就为它定义这两个属性

public class Animal{
// 吃东西
private String eat;
// 喝东西
private String drink;
}

然后我们再定义一个具体的动物老虎,让它去继承这个动物类,老虎里面什么属性都没有定义

public class Tiger extends Animal{
}

然后我们再定义一个狮子对象,也让它去继承动物

public class Lion extends Animal{
}

然后我们定义一个方法,参数传Animal对象,同时创建狮子与老虎的具体对象去调用它

private void testAnimal(Animal animal) {
animal.setEat("狗粮");
animal.setDrink("矿泉水");
}

public void test() {
Tiger tiger = new Tiger();
testAnimal(tiger);
Lion lion = new Lion();
testAnimal(lion);
}

通过这个例子可以看到,假如我们把testAnimal这个方法抽象为接口,我们的参数只需要定义一个Animal父类就可以,不需要去关心对方到底想传什么动物 即使再新建黑熊、河马等等,这些动物都需要去吃东西,喝东西,但我们不可能为每个动物都写个方法,那样代码会变得极为重复并且不利于维护

然后可能有同学会有疑问,那要是不同的动物需要吃不同的东西怎么办,你这都写成固定的数据了,这个更简单了,还是两个字,抽象,再把狗粮与矿泉水抽象为参数就可以了

public void test() {
Tiger tiger = new Tiger();
testAnimal(tiger,"面包","牛奶");
Lion lion = new Lion();
testAnimal(lion,"香肠","可乐");
}
private void testAnimal(Animal animal, String food, String water) {
    animal.setEat(food);
    animal.setDrink(water);
}

上面只是一个简单的例子,多态还需要在代码中不断地去理解,去总结,掌握并非一朝一夕 多态的最大作用就是 让大家实现了 “面向抽象编程,面向接口编程”

有了多态,我们能把具体的老虎、狮子的接口抽象为动物 多态就好像一只无形的手将基类(Anmial)还有子类(Tiger,Lion)联系起来,如果没有多态,那么很多继承可能就失去了作用,抽象也成为了空谈

总而言之,封装和继承是多态的基石,有了多态才能进行真正的面向对象编程,面向接口编程

标签:animal,何为,多态,Tiger,Lion,抽象,Animal,testAnimal
From: https://blog.51cto.com/u_15908376/6900639

相关文章

  • 【设计原则】图解何为依赖倒置
    依赖倒置原则(DependenceInversionPrinciple,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。要理解何为倒置,那就先得明确什么是“正向”,可以看到下图代码是自上而下地调用,即高层模块依赖底层模块,这就是正向依赖。:而依赖倒置则是使用抽象接口来降低耦......
  • 抽象类 vs 接口【概念解析系列_2】【C# 基础】
    〇、前言抽象类和接口的相似之处还是很多的,但是它们的侧重点不同,本文将简单梳理下。一、简介与示例1.1抽象类抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创......
  • Java 多态
    Java多态1.多态方法或对象具有多种形态。是面向对象的三大特征之一,多态是建立在封装、继承基础之上的2.多态的实现:方法的重载中,使用不同的形参调用方法体现出了多态方法的重写中,使用父类或子类的对象调用方法体现出了多态对象的多态:对象的编译类型与运行类型可以不一样......
  • 虚函数与抽象函数
    虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写  //虚方法,必须声明主体(默认方法体)可重写可不重写。publicclassA{publicvirtualvoida(){Console.WriteLine("虚函数a");}......
  • 2023.7.28 周五:抽象类 abstract
    1//不能new抽象类,只能依靠子类去重写来实现2//抽象类中可以写普通方法3//抽象方法必须写在抽象类中4//5//person6packagecom.mu.www;78publicabstractclassPerson{//抽象类9publicabstractvoiddoSth();//抽象方法,只有方法名字,没有方法的实......
  • 何为DDD
     从这一刻开始,请大家忘记自己是一名技术人员,用业务的角度来思考问题。 1、什么是DDDDDD(Domain-drivendesign,领域驱动设计),是一个很好的应用于微服务架构的方法论DDD要求项目全生命周期中,所有岗位人员都基于业务的角度去思考问题,而不是基于技术角度。“......
  • Java面试题 P8:接口和抽象类的区别
    普通回答:1、抽象类可以有抽象方法和实现的方法,可以存在普通成员函数,而接口中只能存在publicinterface方法。2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的。3、抽象类只能继承一个,接口可以实现多个。抽象类和接口的异同点 ......
  • c++学习:封装、继承、多态
    c++是面向对象的编程语言,相对于c具有封装、继承、多态的特点。封装定义:封装就是将对象的属性和行为封装起来,形成一个有机的整体,其载体就是类。类通常对客户隐藏其实现细节,这就是封装的思想,就比如我们使用一个库函数时,我们只需要知道它的作用就可以了,没必要去了解它的内部工......
  • java中关于多态的理解
    多态:是同一个行为具有多个不同表现形式或形态的能力。在代码的运用中主要是关于子类中方法的重写,实现了同一个父类接口可以进行不同子类中重写的方法publicclassGeometricOject{//父类publicdoublefindArea(){return0.0;}}publicclassCircleext......
  • Day05-22 多态
    多态即同一方法可以根据发送对象的不同而采用多种不同的行为方式一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)多态存在的条件有继承关系子类重写父类方法父类引用指向子类对象注意:多态是方法的多态,属性没有多态性。ins......