У меня есть код, который выглядит так:
public class A
{
public void doStuff()
{
System.out.print("Stuff successfully done");
}
}
public class B extends A
{
public void doStuff()
{
System.out.print("Stuff successfully done, but in a different way");
}
public void doMoreStuff()
{
System.out.print("More advanced stuff successully done");
}
}
public class AWrapper
{
public A member;
public AWrapper(A member)
{
this.member = member;
}
public void doStuffWithMember()
{
a.doStuff();
}
}
public class BWrapper extends AWrapper
{
public B member;
public BWrapper(B member)
{
super(member); //Pointer to member stored in two places:
this.member = member; //Not great if one changes, but the other does not
}
public void doStuffWithMember()
{
member.doMoreStuff();
}
}
Однако существует проблема с этим кодом. Я храню ссылку на участника в двух местах, но если одно изменится, а другое нет, могут возникнуть проблемы. Я знаю, что в Java наследуемый метод может сузить свой тип возвращаемого значения (и, возможно, аргументы, но я не уверен) до производного класса. То же самое относится к полям?