设计模式*java多态

问题描述

现在有这种情况:有多个结构差不多的类,指它们的成员变量,成员函数都基本相同,但它们,有个字段是互不相同的(声明类型跟值都不同)。很自然,我们会将这些类的共同部分,抽取出来,放在一个父类里,然后让这些类继承,这样就方便以多态的形式访问。但,对于前面说的那个不同的字段,又必须对其进行赋值跟访问,这种情况,又想实现多态,又得考虑到这个字段,该怎么办呢?即,应该怎么样将这个互不相同的字段提取到父类里呢???如下代码:(还没实现继承)publicclassSubClassA{publicintdifferentInt;//--------------互不相同字段privateStringcommonString;publicvoidcommonRun(){}}publicclassSubClassB{publicdoubledifferentDouble;//--------------互不相同字段privateStringcommonString;publicvoidcommonRun(){}}.......还有很多,结构类似的类,在些省略。很自然,我们会想到把公共部分提取到父类里。父类:publicclassParent{privateStringcommonString;publicvoidcommonRun(){}}各种子类:publicclassSubClassAextendsParent{publicintdifferentInt;//--------------互不相同字段}publicclassSubClassBextendsParent{publicdoubledifferentDouble;//--------------互不相同字段}........还有很多,结构类似的子类,在些省略。我们知道,如下的main方法,会出错:publicstaticvoidmain(String[]args){Parentp1=newSubClassA();p1.differentInt=0;//-----这里有错。Parentp2=newSubClassB();p2.differentDouble=0.0;//-------这里也有错。}对于,这种情况,应该怎么处理呢?即如何处理这个互不相同的字段,又实现多态?

解决方案

解决方案二:
放方法里去取
解决方案三:
可以用泛型publicclassParent<T>{privateStringcommonString;publicTdifferent;publicvoidcommonRun(){}}不放在父类里面个人感觉也没什么,参考下jdk中的buffer类,buffer类是一个抽象的公共父类。buffer类的每个子类都有get(),put()方法,但是每个子类的该方法的参数都不同,比如IntBuffer中的是get(int),put(int),FloatBuffer中的是get(float),put(float),最终jdk实现的时候get(),put()方法也没有放到父类中。
解决方案四:
用泛型怎么样?classParent<T>{privateStringcommonString;privateTdifferent;publicvoidcommonRun(){}publicTreturnDifferent(){return(T)null;}}

解决方案五:
classParent<T>{privateStringcommonString;privateTdifferent;publicvoidcommonRun(){}publicTreturnDifferent(){returndifferent;}}

解决方案六:
引用4楼billjimsam的回复:

JavacodeclassParent<T>{privateStringcommonString;privateTdifferent;publicvoidcommonRun(){}publicTreturnDifferent(){returndifferent;}}

感觉是可以解决问题哦,强!但,一般在类设计的时候,我们会怎么对待不同子类里,相互不同的成员呢?

时间: 2024-10-14 19:16:37

设计模式*java多态的相关文章

java代码-关于java多态的问题,不是很懂。

问题描述 关于java多态的问题,不是很懂. 在java se中为什么利用父类引用指向子类对象.而不直接new子类呢,这样有什么好处? 解决方案 换句话说,每天到吃饭的点,我们习惯会说,"去吃饭",而不是会说"去吃青椒肉丝盖浇饭".父类相当于一个范围,子类相当于一个具体的. 解决方案二: 昨天看到有关java多态的一篇文章,内容如下文章转自:http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.as

您的设计模式,我们的设计模式 java设计模式

http://download.csdn.net/download/yangxin00000000/3212729   您的设计模式,我们的设计模式 java设计模式

Java多态的使用注意事项_java

Java多态是如何实现的?Java的多态和C++一样,是通过延时绑定(late binding)或者说运行时绑定(runtime binding)来实现的.当调用某一个对象引用的方法时,因为编译器并不知道这个引用到底指向的是变量声明时说明的类型对象,还是该类型子类的对象.因此编译器无法为这次调用绑定到具体的某个方法.只有通过java中的运行时类型识别(RTTI, Runtime type identification)在运行时绑定到具体的方法.下面是一个具体的例子: 复制代码 代码如下: cla

java多态问题求解 引用方面 谢谢

问题描述 java多态问题求解 引用方面 谢谢 java中 父类的引用指向子类对象有什么用啊?父类的引用反映的又是什么呢? 解决方案 首先,多态概念的体现在于:该引用对象的行为是由它真实的子类类型决定的.其次, 父类类型的引用指向子类类型的实例,这是一种面向抽象编程的编程思想,将变量定义成抽象类型,那么对变量的使用代码可以保持不变,当客户端则根据自己需要传递该抽象类的实现.这种写法很常用,就是经典的面向抽象编程原则. 解决方案二: 你先弄清楚多态的作用,你就明白了 解决方案三: 多态就是同类事物

关于java多态的一些问题

问题描述 关于java多态的一些问题 源代码: public class test { public static void main(String args[]) { A a = new B(); System.out.println("a的地址="+a); System.out.println("在a中--------a="+a.a); System.out.print("调用a.get()方法后---------"); a.get(); B

Java多态初体验

Java多态初体验本文面向Java初学者,我们在教材上经常会看到Java是多态的,可是一般的教科书只停留在理论上,很少有实际操作.现在把多态个概念用代码简单描述一下,由于本人水平有限,所以难免有不足之处.      首先我们有这样几个类,电脑,个人电脑,笔记本电脑. java 代码 class Computer{                  public void turnOn(){         }     }    现在有了电脑这个类,那么个人PC,笔记本都是继承他. java 代码

详解Java多态对象的类型转换与动态绑定_java

Java多态对象的类型转换 这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. 在继承链中,我们将子类向父类转换称为"向上转型",将父类向子类转换称为"向下转型". 很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型.程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性. 然而有些时候

浅谈java多态的实现主要体现在哪些方面_java

thinking in java3中的多态 People are often confused by other, non-object-oriented features of Java, like method overloading, which are sometimes presented as object-oriented. Don't be fooled: If it isn't late binding, it isn't polymorphism 按文面翻译 人们总是被jav

java多态问题的讨论 谢谢

问题描述 java多态问题的讨论 谢谢 java多态中 父类的引用指向子类对象 可是如果只是子类的引用指向子类对象 不是也能调用父类.子类的方法吗 为什么要让 父类的引用指向子类对象? 解决方案 你可以搜一下面向抽象编码这个概念,本质上来说,变量定义的类型是父类类型还是子类类型,只要能满足你的功能需求,都是一样的效果的. 但是,如果编程中,遵循这个原则,将引用变量定义为抽象类型(即父类类型的话),那么你的代码就更容易扩展和维护了. 举个例子,比如你定义了一个UserService 接口类型,它的