@Getter
public abstract class BaseProduct {
Account account = new Account();
}
public class ProductOne extends BaseProduct {
FieldOne fieldOne = new FieldOne();
}
public class ProductTwo extends BaseProduct {
FieldTwo fieldTwo = new FieldTwo();
}
public class Account {
public TypeOne methodOne() {
return typeOne;
}
public TypeTwo methodTwo() {
return typeTwo;
}
}
public class MyClass {
ProductOne productOne = new ProductOne();
productOne.getAccount().methodOne(); //accessible
productOne.getAccount().methodTwo(); //not accessible (error)
ProductTwo productTwo = new ProductTwo();
productTwo.getAccount().methodOne(); //not accessible (error)
productTwo.getAccount().methodTwo(); //accessible
}
因此,我有两个类(ProductOne和ProductTwo),它们从基本抽象类(BaseProduct)继承。 基础抽象类依次创建另一个类(帐户)的对象
现在,我想限制对ProductOne对象的Account类的某些方法的访问,并类似地限制对ProductTwo对象的某些其他方法的访问。
我认为我需要将Account类创建为Interface / Abstract类,并为其创建不同的实现。这种理解正确吗?你能告诉我如何做到这一点吗?
答案 0 :(得分:0)
这里似乎有两行Product
概念。您可以做的是使BaseProduct
和Account
都抽象并使用泛型。
public abstract class BaseProduct<A extends Account> {
public abstract A getAccount();
}
class ProductOne extends BaseProduct<TypeOneAccount> {
FieldOne fieldOne = new FieldOne();
}
class ProductTwo extends BaseProduct<TypeTwoAccount> {
FieldTwo fieldTwo = new FieldTwo();
}
这将允许将具体的“产品”类型绑定到特定的Account
类型。
然后,从methodOne
中删除methodTwo
和Account
并在实际的“类型一”和“类型二”类中实现它们:
public abstract class Account {
}
public class TypeOneAccount extends Account {
public TypeOne methodOne() {
return typeOne;
}
}
public class TypeTwoAccount extends Account {
public TypeTwo methodTwo() {
return typeTwo;
}
}
使用此方法,以下两项将在编译时失败:
//fails because productOne.getAccount() returns a TypeOneAccount object,
//which doesn't have methodTwo()
productOne.getAccount().methodTwo()
//fails because productTwo.getAccount() returns a TypeTwoAccount object,
//which doesn't have methodOne()
productTwo.getAccount().methodOne()