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
的实例


如果确实需要根据某个对象的实际类型(与引用该对象的变量的声明类型相反)调用静态方法,则需要创建一个调用相应静态方法的非静态方法,并在子类中重写它。

显然,这不是我的实际用途;只是一个简单的例子显然这不是我的实际用途;只是一个简单的例子