【发布时间】:2014-03-03 17:21:44
【问题描述】:
我阅读了很多帖子和文章,现在明白了静态方法不能被继承。为了解释我的问题,您可以查看以下代码:
主类:
public class DataTable {
public String id;
public String date;
public String reserve() throws SQLException {
......
String query="insert into `" + this.getClass().getSimpleName() +"`() values ()";
........
String key = ......
.......
return key;
}
}
其中一个子类:
public class Contact extends DataTable{
public String firstName;
public String lastName;
public String phoneNumber;
...........
}
有了这个,如果我需要在某个时间点预订联系人,我需要写:
Contact contact=new Contact();
String id = contact.reserve();
这行得通。但我发现它不是最优的。对我来说,第一行完全没用。我更喜欢写作:
String id = Contact.reserve();
代码会更简洁,我猜它会在运行时使用更少的资源,因为它不必创建我们真正不需要的 Contact 实例。但为此,我应该:
- 在每个子类中创建一个特定的reserve() 静态方法并将其从主类中移除。我真的不认为它更好,因为我会在大量类中拥有完全相同的代码;
- 或在主类中将reserve()设为静态,并允许它访问调用它的类名,这在java中似乎不可行。
我希望我的问题足够清楚。关于如何处理的任何想法?还是我应该保持原样?
【问题讨论】:
-
我真的不明白为什么你觉得它不是最优的:代码很干净,如果需要特定的
reserve实现,你可以创建Contact的子类。甚至更好:将其作为实用方法并传递所需的参数,而不是进行这样的static继承。
标签: java inheritance static classname