草庐IT

java - 如何向下转换 Java 对象?

我正在尝试理解Java的多态性,并且我有一个关于向下转换对象的问题。假设对于这个例子,我有两个继承自父类(superclass)Animal的子类Dog和Cat据我了解,向下转换对象的唯一方法是该对象已经是好的类型,如下所示:Animala=newDog();Dogd=(Dog)a;这行得通吗?但是如果我想在不知道它会是什么的情况下创建一个普通的动物,然后在我知道的时候施放它,我该怎么做呢?Animala=newAnimal();Dogd=(Dog)a;这会在运行时抛出ClassCastException对吗?我发现这样做的唯一方法是创建一个新的Dog构造函数,该构造函数从普通动物创建

java - 关键字 'this' 可以在 Java 的抽象类中使用吗?

我试过下面的例子,它工作正常。我希望它选择子类的值,因为不会为父类(superclass)创建对象(因为它是抽象的)。但它只是拾取父类(superclass)的字段值。请帮我理解这背后的概念是什么?abstractclassSuperAbstract{privateinta=2;publicvoidfunA(){System.out.println("InSuperAbstract:this.a"+a);}}classSubClassextendsSuperAbstract{privateinta=34;}我正在调用newSubClass.funA();我希望它打印34,但它正在打印2

java - 关键字 'this' 可以在 Java 的抽象类中使用吗?

我试过下面的例子,它工作正常。我希望它选择子类的值,因为不会为父类(superclass)创建对象(因为它是抽象的)。但它只是拾取父类(superclass)的字段值。请帮我理解这背后的概念是什么?abstractclassSuperAbstract{privateinta=2;publicvoidfunA(){System.out.println("InSuperAbstract:this.a"+a);}}classSubClassextendsSuperAbstract{privateinta=34;}我正在调用newSubClass.funA();我希望它打印34,但它正在打印2

java - 从静态方法调用 super 方法

是否可以从子静态方法调用超静态方法?我的意思是,笼统地说,到目前为止,我有以下几点:publicclassBaseControllerextendsController{staticvoidinit(){//initstuff}}publicclassChildControllerextendsBaseController{staticvoidinit(){BaseController.loadState();//moreinitstuff}}它可以工作,但我想以一种通用的方式来做,比如调用super.loadState(),这似乎不起作用... 最佳答案

java - 从静态方法调用 super 方法

是否可以从子静态方法调用超静态方法?我的意思是,笼统地说,到目前为止,我有以下几点:publicclassBaseControllerextendsController{staticvoidinit(){//initstuff}}publicclassChildControllerextendsBaseController{staticvoidinit(){BaseController.loadState();//moreinitstuff}}它可以工作,但我想以一种通用的方式来做,比如调用super.loadState(),这似乎不起作用... 最佳答案

java - 使用 Hibernate 持久化接口(interface)集合

我想用Hibernate保持我的小动物园:@Entity@Table(name="zoo")publicclassZoo{@OneToManyprivateSetanimals=newHashSet();}//JustamarkerinterfacepublicinterfaceAnimal{}@Entity@Table(name="dog")publicclassDogimplementsAnimal{//IDandotherproperties}@Entity@Table(name="cat")publicclassCatimplementsAnimal{//IDandotherp

java - 使用 Hibernate 持久化接口(interface)集合

我想用Hibernate保持我的小动物园:@Entity@Table(name="zoo")publicclassZoo{@OneToManyprivateSetanimals=newHashSet();}//JustamarkerinterfacepublicinterfaceAnimal{}@Entity@Table(name="dog")publicclassDogimplementsAnimal{//IDandotherproperties}@Entity@Table(name="cat")publicclassCatimplementsAnimal{//IDandotherp

java - 静态绑定(bind)和动态绑定(bind)

我真的对动态绑定(bind)和静态绑定(bind)感到困惑。我读过在编译时确定对象的类型称为静态绑定(bind),在运行时确定对象类型称为动态绑定(bind)。下面的代码发生了什么:静态绑定(bind)还是动态绑定(bind)?这表明了什么样的多态性?classAnimal{voideat(){System.out.println("Animaliseating");}}classDogextendsAnimal{voideat(){System.out.println("Dogiseating");}}publicstaticvoidmain(Stringargs[]){Animal

java - 静态绑定(bind)和动态绑定(bind)

我真的对动态绑定(bind)和静态绑定(bind)感到困惑。我读过在编译时确定对象的类型称为静态绑定(bind),在运行时确定对象类型称为动态绑定(bind)。下面的代码发生了什么:静态绑定(bind)还是动态绑定(bind)?这表明了什么样的多态性?classAnimal{voideat(){System.out.println("Animaliseating");}}classDogextendsAnimal{voideat(){System.out.println("Dogiseating");}}publicstaticvoidmain(Stringargs[]){Animal

java - 何时在 Java 泛型中使用通配符?

这是来自HeadFirstJava:(第575页)这个:publicvoidtakeThing(ArrayListlist)做同样的事情:publicvoidtakeThing(ArrayListlist)所以这是我的问题:如果它们完全相同,我们为什么不写publicvoidtakeThing(ArrayListlist)或publicvoidtakeThing(ArrayListlist)另外,什么时候使用?而不是泛型的方法声明(如上)中的T,还是类声明?有什么好处? 最佳答案 两者的最大区别publicvoidtakeThing