2012-01-11 21 views
1

我有几个不同类型的用户(不同类别)在我的应用程序的Java抽象类的提醒

User1 

User2 

等等

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

我真的不知道如何工作,但我想要做的是一样的东西:

​​

无需实例化抽象类用户

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

任何人都可以给我一些提示?

谢谢

+3

抽象类可以有静态方法;它只是不能有抽象的静态方法。你想做什么?你的意思是每个用户的子类型是单身? (也就是说,最多只有一个'User1'对象;最多只有一个'User2'对象;等等?) – 2012-01-11 04:49:35

+0

只有一个单例是“User”。它会根据情况实例化(可能是User1或User2等)。之后,应用程序期间无法再回来。用户被定义并且它的方法适合于它的实例化。 – 2012-01-11 04:55:58

+0

制作'User'摘要有什么问题,给它提供像getId这样的实例方法,然后让'User1'等扩展它?你需要访问User的子类可能覆盖的方法的实现吗? – 2012-01-11 04:57:13

回答

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小号专门)并不完全意义。

1

我真的不知道如何工作,但我想要做的东西像 :...而不必实例化抽象类用户

你不能实例化一个抽象类。

我的问题是一个抽象类不能有静态方法

是的,可以。

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

有永远只能一个User实例?你的问题需要改进。你的问题到底是什么?

+0

是的,应用程序运行时只有一个用户实例。对不起我可怜的英语 – 2012-01-11 05:00:15

+0

没问题。如果只有一个实例使用Singleton模式。你可以在维基百科上找到它。 – 2012-01-11 05:26:05

+0

考虑通过工厂返回正确类型的用户的单例模式。 – 2012-01-11 05:31:00

0

筛选常见方法用户1用户2。现在有常用的方法一个抽象类,用户如下面

public abstract class User{

public void commonmethod1();

public void commonmethod2();

}

现在定义两个用户类用户1和用户应该有ATLEAST一个额外的方法像下面一样

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(){}

}

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

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() { 
      . . . 
     } 
    } 
}