问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

多态存在的3个必要条件具体每个条件怎么理解

发布网友 发布时间:2022-05-03 05:29

我来回答

3个回答

热心网友 时间:2022-04-23 03:06

1、继承:

在多态中必须存在有继承关系的子类和父类。基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。

2、重写:

子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

3、向上转型:

在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了。

只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。

对于Java而言,多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

扩展资料:

作用

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。

比如从某个基类派生出多个子类,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子类对象中的任何一个可以赋给其基类对象的引用,或者说将子对象地址赋给基类指针,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类的引用来访问其子类对象的,你要做的就是一个赋值操作。

参考资料来源:百度百科——多态

热心网友 时间:2022-04-23 04:24

  多态存在的3个必要条件:
  1.要有继承
  2.要有方法的重写
  3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接)
  对于多态,可以总结它为:
  一、使用父类类型的引用指向子类的对象;
  二、该引用只能调用父类中定义的方法和变量;
  三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
  四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
  五、如果继承的子类继承父类的的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。
  代码示例:
  package Class.www.testdescription;
  public class Animal {
  private String str;
  public void voice() {
  System.out.println("普通叫声");
  }
  }
  class cat extends Animal {
  public void voice() { //子类中对父类 voice 方法的重写
  System.out.println("喵喵喵");
  }
  }
  class Dog extends Animal {
  public void voice() {
  System.out.println("汪汪汪");
  }
  public void lookdoor()
  {
  System.out.println("看门的小狗...");
  }
  }
  class Tiger extends Animal {
  public void voice() {
  System.out.println("哇哇哇");
  }
  }

  package Class.www.testdescription;
  public class Test {
  public static void testanimalvoice(Animal c) {
  c.voice();
  }
  public static void main(String[] args) {
  Animal a = new cat(); // 父类的引用指向子类的对象
  Animal b = new Dog(); // new后面一定是一个类,它是用来创建一个对象或实例,一个普通类在没有new之前他的属性,方法在内存中都是不存在的,
  Animal c = new Tiger();//也就是说, 只有new后这些才会在内存中存在。也就是说只有new了之后,这个类才能用.
  testanimalvoice(a);
  testanimalvoice(b);
  testanimalvoice(c);
  Dog b2 = (Dog) b; // 类对象的强制转化
  b2.lookdoor();
  }
  }

热心网友 时间:2022-04-23 05:59

继承,覆盖,和父类引用。
比如有个Shape的父类,Shape有个方法叫draw()。Circle和Rectangle继承了Shape并实现了draw()方法。在很多场景中,我们不关心到底是什么Shape,只是想让他显示出来,void show(Shape s) { s.draw(); },这样就实现了一个shape的不同行为。追问您能说下各自具体的理论理解吗

追答其实在我举的这个列子中就已经表现出来了,不必太纠结于理论。多写一些程序慢慢就懂了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
sometimesome timesometimessome times的区别 瓜地的午餐怎么造句 夏季宝宝不吃饭应该怎么办 狼人杀里面的白狼王模式怎么玩? 狼人杀白狼王和骑士:操作至上的高效玩法指南 狼人杀手游白狼王怎么玩 详细玩法攻略 狼人杀 狼人杀的白狼王怎么玩? 国产轮毂品牌有哪些 国产轮毂品牌哪个品牌好 国内轮毂有哪些品牌 岗位和职务怎么填 请问java中怎么实现多态? 1、 什么是继承、多态,sava如何实现多态? C# 如何实现多态? 什么是多态?在C++中多态是如何实现的? 什么是多态性,C++中是如何实现多态的 什么叫做多态性 ?在C++中是如何实现多态的? java中多态是怎么实现的 C++中多态是怎样实现的? 如何实现Java的多态 C++多态是怎么实现的 java语言是如何实现多态的? 什么是多态?如何实现多态? 什么是多态,怎样实现多态 Navicat For MySQL 8.0.19简体中文版 有谁知道青岛煤的价格? 坐也是坐,立也是坐,行也是坐,卧也是坐 (打一动物) 坐也是坐,立也是坐,行也是坐,卧也是坐.打一个动物 坐也是坐,立也是立,行也是坐,卧也是坐.打一动物 坐也是坐,立也是坐,行也是坐,卧也是坐。打一动物? 猜一猜坐也是坐,立也是坐,行也是坐,卧也是坐,打一动物 简述多态的概念,多态实现的条件,c++问题 PHP中多态如何实现 什么是运行时多态?C++语言是如何实现运行时多态的? 初三化学净化水 生理期爱爱射进去会怀孕吗? 纯净水和净化水的区别是什么 做爱射精一般要做多久才射? 和老公爱爱射进去了怀孕高吗 商业上纯净水的定义和化学上纯净水的定义分别是什么? 为什么爱爱射里面都没流出来 在化学中,净化水的过程主要包括三步操作,分别是? 九年级化学净化水过程是什么 化学水的净化 做爱射的时候,身体还继续动对身体有坏处吗? 为什么做爱射的精第2天还会流出来? 初三化学 关于水的净化 初中化学中那种方式是净化水最好的 排卵期爱爱射进去了,但马上蹲着流出来了,请问这会怀孕吗, 水的净化是什么变化物理变化 还是化学变化 在净化水这个过程中什么是化学变化