现有父类:
class Parent {
public static String st;
}
两个子类:
class C1 extends Parent{
public static String st = "11";
}
class C2 extends Parent{
public static String st = "22";
}
另外两个子类都需要一个方法fun(),其中要调用自己类中的st成员。
这两个的方法的代码一模一样,所以我准备在Parent里实现这个方法。
但问题出现了:Parent里实现的这个方法调用的st是Parent里面那个,而不是C1 或者 C2 里的。我怎样才能让子类调用的fun()中使用的st是该类自己的成员?
public abstract class Parent
{
static String st = "panel";
abstract String getSt();
String run()
{
return getSt();
}
}
class C1 extends Parent
{
public static String st = "11";
@Override
String getSt()
{
return st;
}
}
class C2 extends Parent
{
public static String st = "22";
@Override
String getSt()
{
return st;
}
}
你两个子类里都有这么一段,我曾提到方法的实现一样所以要放在父类里。
但这两个方法不一样,做的事也不一样。子类实现父类的抽象方法,然后返回自己的成员属性。
上面这段代码没办法实现你所说的问题吗?
你声明的时都是用public static 访问直接用 类名.st就可以了
如:Parent.st //父类的值, return C1.st;//返回子类C1的属性st的值
return C2.st;//返回C2属性st的值
这应该就是体现到了Java的一个面向对象的特征了---多态.
你就直接在父类实现这个方法,子类重写这个方法了..
只是你在new对象的值时候指向子类的实例就行了,
例如
Parent p=new C1();
p.fun();这不就是调的子类的吗?