问个java继承的问题

[复制链接]
查看11 | 回复5 | 2010-9-28 16:39:29 | 显示全部楼层 |阅读模式
现有父类:
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是该类自己的成员?
谢谢回答~
1. 去掉static后貌似还是用的父类的st
2. 另外,st我确实是打算作为静态常量,不希望每次调用fun()时都重新对st赋值。
我觉得这种方法不错,大家怎么看:
http://www.javaeye.com/problems/50984

回复

使用道具 举报

千问 | 2010-9-28 16:39:29 | 显示全部楼层
反射。。。public class RefTest {
public static void main(String[] args) throws Exception {
new C2().fun();
}
}class Parent {
public static String st;
public void fun() throws Exception {
Class clazz = this.getClass();
Field st = clazz.getField("st");//获得名字叫st的属性
S
回复

使用道具 举报

千问 | 2010-9-28 16:39:29 | 显示全部楼层
直接调用class Parent {
public static String st;public void run(String st){ System.out.println(st); }}class C1 extends Parent{
public static String st =
回复

使用道具 举报

千问 | 2010-9-28 16:39:29 | 显示全部楼层
其实相当简单,使用this关键字。
回复

使用道具 举报

千问 | 2010-9-28 16:39:29 | 显示全部楼层
支持传参数或者另外一种方法是你把fun的实现独立出来,变成FunHolder然后在子类里面调用
回复

使用道具 举报

千问 | 2010-9-28 16:39:29 | 显示全部楼层
就是为了代码看起来更简洁,不如传个参数过去了,用反射太麻烦了public static void fun(String st){System.out.println(st); }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行