Java抽象类建议

时间:2012-01-11 04:46:40

标签: java static singleton abstract

我的应用程序中有几种不同类型的用户(不同的类)

User1

User2
等等......

我希望有一个抽象类“User”,它为所有类型的用户加入相同的方法 例如:getId(), getAge()....

我真的不知道它是如何工作的,但我想做的是:

User.setType(2); //a kind a constructor
User.getId()... //etc .. the getId() method of the Users2 class

无需实例化抽象类User

我该怎么做? 我遇到的问题是抽象类不能有静态方法......用户必须是静态的或单例我不知道什么是最好的。

有人能给我一些提示吗?

谢谢

4 个答案:

答案 0 :(得分:1)

public abstract class User {
    private int age;
    private int id;

    public int getAge() { return age; }
    public int getId() { return id; }
}


public class User1 extends User { }
public class User2 extends User { }

User user1 = new User1();
user1.getId();
User user2 = new User2();
user2.getId();
  

无需实例化抽象类User

无法实例化抽象类。

  

用户必须是静态的或单身人士我不知道什么是最好的。

尽管抽象类可以使用静态方法,但这并不是很有意义(特别是当您需要抽象User和多个特定类型的User时)。

答案 1 :(得分:1)

  

我真的不知道它是如何工作的,但我想做的是什么   喜欢:...无需实例化抽象类User

您无法实例化抽象类。

  

我遇到的问题是抽象类不能有静态方法

是的,可以。

  

用户必须是静态的或单身人士我不知道什么是最好的。

是否只有一个User实例?你的问题需要改进。究竟是什么问题?

答案 2 :(得分:0)

过滤 User1 User2 的常用方法。现在有一个抽象类用户,使用下面的常用方法

public abstract class User{

public void commonmethod1();

public void commonmethod2();

}

现在定义两个用户类User1和User2,它们应至少有一个额外的方法,如下面的

public class User1 extends User{

public void commonmethod1(){}

public void commonmethod2(){}

public void extramethod1(){}

}

public class User2 extends User{

public void commonmethod1(){}

public void commonmethod2(){}

public void extramethod12(){}

}

决定如何处理子类,单例限制对象的状态,有时它被视为反模式。

答案 3 :(得分:0)

最干净的事情是制作User并界面和定义工厂类。这是一个版本(稍微滥用"工厂类"的概念),工厂作为静态类(它也可以定义为单例类):

public interface User {
    int getId();
}

public class UserFactory() {
    private final User sInstance;

    public static void initFactory(int type) {
        switch (type) {
        case 1:
            sInstance = new User1();
            break;
        case 2:
            sInstance = new User2();
            break;
        default:
            throw new IllegalArgumentException("error message");
        }
    }

    public static User getUser() {
        if (sInstance == null) {
            throw new IllegalStateException("Must initialize factory first");
        }
        return sInstance;
    }

    private static class User1 implements User {
        public int getId() {
            . . .
        }
    }

    private static class User1 implements User {
        public int getId() {
            . . .
        }
    }
}