黑马程序员技术交流社区

标题: set<?> set = new hashSet<?>()的疑惑 [打印本页]

作者: jttsai    时间: 2013-11-26 15:46
标题: set<?> set = new hashSet<?>()的疑惑
set<?> set = new hashSet<?>()与hashSet<?> set = new hashSet<?>();区别在哪?为什么?
为什么set<?> set = new hashSet<?>()这个是常用的呢?由什么优点啊?不解
作者: 小痞痞    时间: 2013-11-26 15:58
set<?> set = new hashSet<?>()
面向接口编程对以后的升级比较好、可以将set的引用指向treeset也可以的
而hashSet<?> set = new hashSet<?>();       对以后的升级不是很好    以后的引用就只能是hashset     不利于程序的复用性
作者: 殷挥笔    时间: 2013-11-26 19:28
实例化以后都是HashSet类型的对象,第一个在实例化的时候会优先调用父类的构造方法,体现了java的多态特性(动态多态 父类类型=子类对象),第二个则不然
作者: cuilitang    时间: 2013-11-27 10:57
兄弟,你说的是多态啊,多态在工厂模式中常用,可以解耦和,通过用户输入或者配置文件增强序的灵活性无需修改源代码


  1. package cn.itcast.factory;

  2. import java.util.Scanner;

  3. public class EasyFactoryDemo {
  4.         public static void main(String[] args) {
  5.                 Scanner sc = new Scanner(System.in);
  6.                 String style = sc.next();
  7.                
  8.                 Style s = null;
  9.                 s = EasyFactory.getInstance(style);
  10.                 s.show();
  11.                
  12.         }

  13. }

  14. interface Style{
  15.         public abstract void show();
  16.        
  17. }

  18. class WinXP implements Style{

  19.         @Override
  20.         public void show() {
  21.                 System.out.println("XP风格主题");
  22.                
  23.         }
  24. }

  25. class Win7 implements Style{
  26.         @Override
  27.         public void show() {
  28.                 System.out.println("Win7风格主题");
  29.                
  30.         }
  31. }

  32. //为了不修改主程序,增加一个可以根据参数制造所有对象的Factory
  33. class EasyFactory{
  34.         public static Style getInstance(String className){
  35.                 Style s = null;
  36.                 if("xp".equals(className)) s = new WinXP();
  37.                 if("win7".equals(className)) s = new Win7();
  38.                
  39.                 return s;
  40.                
  41.                
  42.         }
  43. }

  44. /**
  45. * 这个只是最简单的工厂模式,工厂模式还可以结合反射和Properties或者xml使用,通过配置文件new不同的对象
  46. * 总之,最基础的东西要学好。
  47. */
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2