有很多类,它们有一样的静态属性和一样的静态方法。每个类属性值各不相同,静态方法一模一样。
请问这种该怎么设计合适?

解决方案 »

  1.   

    创建一个Parent类,里面定义需要的静态属性和方法,其他类继承此Parent类,在各继承类中定义与Parent类具有相同名字的静态变量以覆盖父类静态属性。
      

  2.   

    定义个类 有属性 get set方法,和普通方法(如果方法需要用到属性)
    获取这个类可以用new,也可以spring DI ,或者工厂模式创建 and so on..
      

  3.   

    或许我设计的真不太妥当,呵呵。
    先就这个问题再问一下,如下的代码,我继承不来静态属性……class base{
      protected static String p;
      public static String getP(){
        return p;
      }
      public static void setP(String a){
        p=a;
      }
    }
    class sub extends base{
      private static String p;
    }class test{
        public static void main(String[] a){
            base.setP("123");
            sub.setP("abc");
            System.out.println(base.getP());
            System.out.println(sub.getP());
        }
    }求一个成功的例子
      

  4.   

    个人觉得静态属性不能用继承的思想来理解,静态属性存放在静态数据区,整个类共享。操作的都是一个区域,所以不论你是用父类调用setP()还是用子类调用setP(),p的值始终以最后一次更改为准。
      

  5.   

    静态属性和方法就静能否继承?class base{
        protected static String p="123";
        public static String getP(){
            return p;
        }
        public static void setP(String a){
            p=a;
        }
        public static String test(){
            return p+"test";
        }
    }
    class sub extends base{
        private static String p="abc";
        //public static String getP(){return p;}
    }class test{
        public static void main(String[] a){
            //base.setP("123");
            //sub.setP("abc");
            System.out.println(base.getP());
            System.out.println(sub.getP());
        }
    }也没有效果,除非在子类中也定义get方法,同样,如果要用set,那么子类中也要定义set方法;而调用test方法也是如此。如果这样还有意义么?难道静态属性和方法无法继承?求解释,求成功的例子
      

  6.   

    静态方法 和属性值都是唯一的 你的例子我运行了  父类赋值后子类只能继承不能重新赋值  建议再好好看看static 语法使用
      

  7.   

    关于静态属性和方法的继承,请大家转到
    http://topic.csdn.net/u/20111102/09/7d750379-8ce9-4dfb-9af3-2e3988cf5719.html
    讨论,谁解释的好分给谁
      

  8.   

    我觉得用 抽象类abstruct class A(){
        public static String arrt ;
        public A(String str){
            arrt = str ;
        }
        public static void method(){
            ......
        }
        abstract void method1();    abstract void method2();  
    }
    public class A1 extends A{
        public A1(String str){
            super(str) ;
        }
        public void method1(){
            ......
        }    public void method2(){
            ......
        }  }