// TestSuperObject.java
public class TestSuperObject
{ private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
} public String toString()
{
return ("name=" + getName());
}
}
// TestSubObject.java
public class TestSubObject extends TestSuperObject
{
private String alias;
public String getAlias()
{
return alias;
}
public void setAlias(String alias)
{
this.alias = alias;
} public String toString()
{
return ("alias=" + getAlias());
}
}// TestSuperClass.java
public class TestSuperClass
{ protected TestSuperObject orignObject;
public TestSuperObject getObject()
{
return this.orignObject;
}
public void setObject(TestSuperObject object)
{
this.orignObject = object;
}
public void release()
{
if (getObject() != null)
{
setObject(null);
}
}
}// TestSubClass.java
public class TestSubClass extends TestSuperClass
{
private TestSubObject orignObject;
public TestSuperObject getObject()
{
return this.orignObject;
}
public void setObject(TestSubObject object)
{
this.orignObject = object;
}
}// TestInheritance.java
public class TestInheritance
{
public static void main(String[] argv)
{
TestInheritance instance = new TestInheritance();
instance.testSuperClass();
instance.testSubClass();
}
public void testSuperClass()
{
System.out.println("----- test case 1 begin------" );
TestSuperClass test = new TestSubClass();
TestSubObject object = new TestSubObject();
object.setAlias("sub object" );
test.setObject(object);
System.out.println(test.getObject());
test.release();
System.out.println(test.getObject());
System.out.println("----- test case 1 end------" );
System.out.println();
} public void testSubClass()
{
System.out.println("----- test case 2 begin------" );
TestSubClass test = new TestSubClass();
TestSubObject object = new TestSubObject();
object.setAlias("sub object" );
test.setObject(object);
System.out.println(test.getObject());
test.release();
System.out.println(test.getObject());
System.out.println("----- test case 2 end------" );
System.out.println();
}
}
public class TestSuperObject
{ private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
} public String toString()
{
return ("name=" + getName());
}
}
// TestSubObject.java
public class TestSubObject extends TestSuperObject
{
private String alias;
public String getAlias()
{
return alias;
}
public void setAlias(String alias)
{
this.alias = alias;
} public String toString()
{
return ("alias=" + getAlias());
}
}// TestSuperClass.java
public class TestSuperClass
{ protected TestSuperObject orignObject;
public TestSuperObject getObject()
{
return this.orignObject;
}
public void setObject(TestSuperObject object)
{
this.orignObject = object;
}
public void release()
{
if (getObject() != null)
{
setObject(null);
}
}
}// TestSubClass.java
public class TestSubClass extends TestSuperClass
{
private TestSubObject orignObject;
public TestSuperObject getObject()
{
return this.orignObject;
}
public void setObject(TestSubObject object)
{
this.orignObject = object;
}
}// TestInheritance.java
public class TestInheritance
{
public static void main(String[] argv)
{
TestInheritance instance = new TestInheritance();
instance.testSuperClass();
instance.testSubClass();
}
public void testSuperClass()
{
System.out.println("----- test case 1 begin------" );
TestSuperClass test = new TestSubClass();
TestSubObject object = new TestSubObject();
object.setAlias("sub object" );
test.setObject(object);
System.out.println(test.getObject());
test.release();
System.out.println(test.getObject());
System.out.println("----- test case 1 end------" );
System.out.println();
} public void testSubClass()
{
System.out.println("----- test case 2 begin------" );
TestSubClass test = new TestSubClass();
TestSubObject object = new TestSubObject();
object.setAlias("sub object" );
test.setObject(object);
System.out.println(test.getObject());
test.release();
System.out.println(test.getObject());
System.out.println("----- test case 2 end------" );
System.out.println();
}
}
----- test case 1 begin------
null
null
----- test case 1 end----------- test case 2 begin------
alias=sub object
alias=sub object
----- test case 2 end------
测试1:
TestSuperClass test = new TestSubClass();测试2:
TestSubClass test = new TestSubClass2();但在测试1中的test.setObject(object),调用的是父类的方法(? Q1),同时给父类的类变量orignObject赋值,可接下来在父类中release()中调用的getObject()却是子类的方法(? Q2),因为是子类的类变量是空,所以返回了,没有任何输出而在测试2中的test.setObject(object),调用的是子类的方法(? Q3),同时给子类的类变量赋值,接下来在父类中的release()中调用的getObject()却是子类的方法(? Q4),而接着访问的setObject()却是父类中的方法(? Q5),导致无法将子类中的类变量置为null,也就意味着release()没有实际起到作用,所以接下在子类中的getObject()还可以继续得到子类变量orignObject
请再看看仅仅是方法重载的问题吗?
有A,B两个类(可以看作是model吧),A继承自B,另外有X,Y两个类(可以看作是service implementation),X继承自Y。在X中会使用A(有一些具体的业务方法),在Y中会使用B(也是具体的业务方法)。
A,B这两个实例需要分别在X,Y中释放,而现在的释放都是通过父类Y中的release()方法。
public void setObject(TestSubObject object)
楼主认为这还是继承么?