2015-04-03 61 views
-2

我目前正在开发一个项目,其中包括创建一个简单的软件cloudShare。Java继承(Java新手)

我们有2种类型的用户,Basic和Premium。基本的只有2GB的空间,而Premium则有5GB。

基本会员不能与他人分享他们的文档,但可以接受高级会员文档。

当高级会员与基本会员共享文件时,基本会员的可用空间减少了整个文件大小的50%,而高级会员理论上可以接收永远不会耗尽的无限共享文件空间。

在我CloudManager类我有用户(超类)的阵列,这样我就可以节省保费和基本成员在同一阵列上。

问题是当我尝试共享文档时,我想要使用方法shareDocument(存在于BasicUser类和PremiumUser类中,它们有点不同,因为在一种方法中可用空间减少了)。

但我无法使用因为它不会在超存在的,只有在subclasses.How我可以解决此方法?

+1

向超类添加一个'abstract'方法。 – 2015-04-03 20:37:49

+5

请将您的标题更改为描述您问题的内容。目前它完全没用。 – 2015-04-03 20:38:53

+1

那么,为什么不把一个抽象的shareDocument方法添加到超类中并在子类中覆盖它呢? – 2015-04-03 20:39:24

回答

1

如果所有用户都具有shareDocument方法,那么你应该在用户类中定义它。您可以将其定义为抽象方法,这意味着您必须在所有子类中实现它,或者您可以在用户中提供默认实现并在子类中覆盖它。

如果不是所有用户都具有shareDocuments方法,那么你可以考虑让你的用户执行该确实有shareDocuments方法并创建该接口类型,而不是用户的集合的接口。

如果您坚持将子类型存储在没有shareDocuments方法的类型的集合中,则可以通过将包含的对象专门转换为具有shareDocuments方法的类型来访问它,但这是一种冒险在这里操纵,我不会推荐它。

0

你应该考虑重新设计User来成为一个抽象类。这样,您可以使用它来跨多个类共享方法。它看起来是这样的:从用户继承可以轻松覆盖的方法shareDocument以及叫它

public abstract class User { 
    public User() { 
     //common initialization junk 
    } 

    public abstract Object shareDocument(); 
} 

现在任何东西。

+0

哎呀抱歉,正在快速回答:P。 IDK什么他返回类型将是我把对象 – 2015-04-03 20:41:10

0

虽然大多数建议的解决方案是正确的&会为现在的工作。我认为分层设计对于变化来说不是很灵活。

将来如果您添加其他功能或添加其他类型的用户,则可能会遇到问题。

我认为更好的方法是使用继承组合。查看设计模式,如命令,装饰器,这会给你更好的想法。