java中关于多态使用的困惑?

问题描述

java中关于多态使用的困惑?
A是父类,B是子类。
A a = new B();
这是多态中的父类引用指向子类对象,可以调用子类中重写了父类的方法。

但我有一点不明白,既然调用重写了父类方法的子类,那么我直接创建一个子类的对象,
也可以达到相同的效果,那我为什么还要使用这样的向上转型呢?哪里又需要用到呢?

谢谢大家解惑。

解决方案

    你说得是这样的,但是大多数情况下,我们写代码时,关联的都是上层抽象类型,即我们只关心拥有某个对象的上层类型,而不关心它具体是哪种类型,那么不管外界给我们哪种它的底层子类,都不影响我这个类的功能。这就是依赖抽象的好处,其实这是设计模式的思想,主要作用就是让我能更容易复用和维护代码,等你写代码久了,接触的多了,就会逐渐体会这样依赖上层的优势了。

解决方案二:
比如说插件程序,主程序先开发出来,主程序定义了接口或者抽象基类。插件开发者通过派生它实现具体的功能。主程序反射加载插件,转换为基类类型,然后调用。
请特别注意,主程序开发者不可能提前预知插件的类型,所以不可能直接使用这个类型。

解决方案三:
java多态困惑
在JAVA中使用多态时切记
Java 多态(Polymoph)

解决方案四:
Java语言三大特性之一,多态这一块我自己知道的也很少,请各位大侠指教,使用多态可以在运行时实现类的动态加载,且在方法的调用时只能调用重写的方法,对于不同类各自定义的方法无法调用,感觉有一种普遍与特殊的关系在里面,不知道对不对,还请各位赐教,不胜感激。

解决方案五:
有一个animal,然后有一个cat,有一个dog,都继承自animal。
如果a1 = new cat() a1 = new dog()
然后比较动物的年龄

这样比较器的参数就可以设置为animal类型

解决方案六:
多态主要不是用在这里的,应该是借口和抽象类吧

时间: 2024-08-03 10:38:34

java中关于多态使用的困惑?的相关文章

变量-Java 中,多态和动态绑定 是一个意思吗?

问题描述 Java 中,多态和动态绑定 是一个意思吗? 我查了一些手头仅有的资料(包括书籍,QQ群,百度),找到的答案都不是很明确,自己目前的理解如下, 多态:指父类引用类型变量指向子类的对象,这样一种状态. 动态绑定:指在多态的情况下,在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,指这样一种过程. 另外,马士兵在他的java基础视频教学中说"多态就是动态绑定".....感觉不太对阿.. 求大虾指点~~ 解决方案 多态不仅是父类引用子类,继承也是多态

Java中的多态用法实例分析_java

本文实例讲述了Java中的多态用法.分享给大家供大家参考.具体分析如下: 多态,是面向对象的程序设计语言最核心的特征.封装性.继承性都比较简单,所以这里只对多态做一个小小的笔记... 1.什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对不同的属性和方法.在Java中,多态的实现指的是使用同一个实现接口,以实现不同的对象实例. 例如,我们定义一个Parent类,再定义一个getName()方法返回一个字符串,定义一个形参为Parent类型的成员方法doS

进一步理解Java中的多态概念_java

多态性有两种: 1)编译时多态性 对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性. 2)运行时多态性 如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性. 方法覆盖表现出两种多态性,当对象获得本类实例时,为编译时多态性,否则为运行时多态性,例如: XXXX x1 = new XXXX(参数列表); //对象获得本类实例,对象与其引用的实例类型一致 XXX xx1 = new XXX(参数列表); x1.toString();

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/* 样例1:   class Parent{      int num = 3;   }     class Child extends Parent{      int num = 4;   } */   /* 样例2: class Parent{   }   class Child extends Parent{     int num = 4; } */   /* 样例3: class Parent{     void show(){         System.out.println

Java中的多态,请高手给我讲解

问题描述 课本上面的原话:1.子类重写父类的方法2.把父类类型作为参数类型,该父类及其对象作为参数传入3.运行时,根据实际创建的对象类型动态使用哪个方法上传的附件里面关于继承的就不要讲了,多和我说说多态hq.judge(new AccpJava("李明","北京中心"));hq.judge(new AccpDot("张华","天津中心")); 这两句话new AccpJava怎么理解 问题补充:wudiju 写道 解决方案 首

品味Java子类型多态的魅力

摘要: Java程序员经常运用对象的多态性使其在适当的地方调用适当的方法,显得很神奇.这种方法通过继承机制来实现.然而,一个严谨的实验可以使其变得很明白,并揭示了,把多态性理解为与类型相关的概念更为合适,比继承机制的解释更好.这种理解可以帮助程序员更好的运用多态. ------WM.保罗 罗格斯 "polymorphism(多态)"一词来自希腊语,意为"多种形式".多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本.尽管如此,这种面向实现的观点导致

多态-java中为什么会自动执行子类重写父类的方法?

问题描述 java中为什么会自动执行子类重写父类的方法? 问题: 1.在main方法中我没有调用paint方法,为什么它会自动被调用? 2.老师说这是多态,可是多态不是需要三个条件实现么?继承,重写方法,父类引用指向子类对象,这里没有第三点啊 代码如下: public class GameFrame extends Frame{ public void launchFrame(){ setSize(500,500); setLocation(100,100); setVisible(true);

java中多态中向下转型的问题

问题描述 java中多态中向下转型的问题 public class Father { public void show (){ System.out.println("父类方法"); } public void show1(){ System.out.println("父类二方法"); } } public class Son extends Father { public void show(){ System.out.println("子类方法&quo

对象-关于java中多态的问题 麻烦大家了

问题描述 关于java中多态的问题 麻烦大家了 change (Object o){ o=new Obj; } 不知道这是什么意思,请各位指教.麻烦各位说一下意思,谢谢! 解决方案 要看更完整的代码.就你这么写一个函数,没有返回值,change看上去是构造函数.和多态扯不上关系. 解决方案二: 你这代码有语法错误,你到底想问什么呢?多态是指同一个类型的不同实现类中,对于同一个行为即方法,有不同的处理过程.这就是多态,类似自然界生物的多样性,例如都是动物都有叫声,但是不同动物的叫声却不同.这在面向