Java 如何创建继承的静态对象
是否可以在子类将拥有的父类中创建静态对象? 澄清:Java 如何创建继承的静态对象,java,inheritance,static,polymorphism,Java,Inheritance,Static,Polymorphism,是否可以在子类将拥有的父类中创建静态对象? 澄清: abstract class DataPacket { public static boolean loaded = false; public abstract static boolean load();// Returns true if it loads. Returns false if already loaded } class DataPacket1 extends DataPacket { publi
abstract class DataPacket {
public static boolean loaded = false;
public abstract static boolean load();// Returns true if it loads. Returns false if already loaded
}
class DataPacket1 extends DataPacket {
public static boolean load() {
if (!loaded) {
// Load data
loaded = true;
return loaded;
}
return false;
}
}
class DataPacket2 extends DataPacket {
public static boolean load() {
if (!loaded) {
// Load data
loaded = true;
return loaded;
}
return false;
}
}
main() {
DataPacket1.load();// returns true
DataPacket1.load();// returns false
DataPacket2.load();// returns true
}
是否有可能做到这一点或类似的事情?< /P> < P>静态方法不能在java中抽象或虚拟(当你考虑java通过VTABLE发送的方式时,这是有意义的)。您应该做的是创建一个实例,并使其成为一个单例
考虑到访问
load()
的方式,您不需要多态行为。也许你的实际情况更复杂,但是你的代码片段并不需要多态性。 < P>静态方法不能是java中的抽象或虚拟(当你考虑java通过VTABLE发送的方式时,这是有意义的)。您应该做的是创建一个实例,并使其成为一个单例
考虑到访问
load()
的方式,您不需要多态行为。也许您的实际情况更为复杂,但您的代码片段并不需要多态性。静态方法不可继承,因为它们属于类而不属于单个对象。因此,代码将不会编译。静态方法不可继承,因为它们属于类而不属于单个对象。因此代码不会编译。不,抽象或虚拟静态方法没有意义,但您也不需要它。只需从DataPacket
中删除抽象load()
方法,代码就会按预期工作
为什么使用虚拟静态方法没有意义?因为静态方法总是通过类引用调用,而不是通过对象引用调用。即使可以编写foo.staticMethod()
,其中foo
是一个声明类型的变量foo
,您实际上是在调用foo.staticMethod()
,即使foo
确实引用了subassofoo
的实例
如果确实需要根据某个对象的实际类型(与引用该对象的变量的声明类型相反)调用静态方法,则需要创建一个调用相应静态方法的非静态方法,并在子类中重写它。否,抽象或虚拟静态方法没有意义,但您也不需要它。只需从
DataPacket
中删除抽象load()
方法,代码就会按预期工作
为什么使用虚拟静态方法没有意义?因为静态方法总是通过类引用调用,而不是通过对象引用调用。即使可以编写foo.staticMethod()
,其中foo
是一个声明类型的变量foo
,您实际上是在调用foo.staticMethod()
,即使foo
确实引用了subassofoo
的实例
如果确实需要根据某个对象的实际类型(与引用该对象的变量的声明类型相反)调用静态方法,则需要创建一个调用相应静态方法的非静态方法,并在子类中重写它。显然,这不是我的实际用途;只是一个简单的例子显然这不是我的实际用途;只是一个简单的例子