Tag: 子类

从Java中的基类访问子类字段

我有一个名为Geometry的基类,其中存在一个子类Sphere : public class Geometry { String shape_name; String material; public Geometry() { System.out.println(“New geometric object created.”); } } 和一个子类: public class Sphere extends Geometry { Vector3d center; double radius; public Sphere(Vector3d coords, double radius, String sphere_name, String material) { this.center = coords; this.radius = radius; super.shape_name = sphere_name; super.material = material; } } 我有一个包含所有Geometry对象的ArrayList,我想迭代它以检查是否正确读取了文本文件中的数据。 […]

类扩展多个Java类?

我知道一个类可以实现多个接口,但是可以扩展多个类吗? 例如,我希望我的类扩展TransformGroup和我创建的类。 这在Java中可行吗? 两个语句class X extends TransformGroup extends Y和class X extends TransformGroup, Y接收错误。 如果不可能,为什么? TransformGroup扩展了Group但我想它也扩展了Node因为它inheritance了Node字段,并且可以在需要Node对象的地方传递。 此外,与Java中的所有类一样,它们扩展了Object类。 那么为什么不可能扩展到多个类? TransformGroupinheritance 那么,如果可能的话,做到这一点的正确方法是什么? 如果没有,为什么以及如何解决问题呢?

带有子类参数的Java getMethod

我正在编写一个使用reflection来动态查找和调用方法的库。 只给出一个对象,一个方法名和一个参数列表,我需要调用给定的方法,就好像方法调用是在代码中显式编写的一样。 我一直在使用以下方法,在大多数情况下都可以使用: static void callMethod(Object receiver, String methodName, Object[] params) { Class[] paramTypes = new Class[params.length]; for (int i = 0; i < param.length; i++) { paramTypes[i] = params[i].getClass(); } receiver.getClass().getMethod(methodName, paramTypes).invoke(receiver, params); } 但是,当其中一个参数是方法支持的类型之一的子类时,reflectionAPI会NoSuchMethodException 。 例如,如果接收者的类定义了testMethod(Foo) ,则以下操作失败: receiver.getClass().getMethod(“testMethod”, FooSubclass.class).invoke(receiver, new FooSubclass()); 即使这有效: receiver.testMethod(new FooSubclass()); 我该如何解决这个问题? 如果方法调用是硬编码的,则没有问题 – 编译器只使用重载算法来选择最适用的方法。 但它不适用于reflection,这是我需要的。 提前致谢!

为什么我得到“无法从静态上下文引用的非静态变量”?

我有一个非常简单的类,我想用它作为另一个的子类。 但是当我把它的代码放在父类的时候,我得到: 非静态变量,不能从静态上下文引用 另一方面,当我将子类GenTest的类代码放在“父级”类代码之外时 – JavaApp1我没有得到这个错误。 public class JavaApp1 { class GenTest { @Deprecated void oldFunction() { System.out.println(“don’t use that”); } void newFunction() { System.out.println(“That’s ok.”); } } public static void main(String[] args) { GenTest x = new GenTest(); x.oldFunction(); x.newFunction(); } } 为什么会这样?

Java中的inheritance – 创建子类的对象也会调用超类的构造函数。 为什么呢?

我有一个关于Javainheritance的问题。 我有两个A和B类, B类inheritance自A: public class A { public A() { System.out.println(“Hi!”); } } public class B extends A { public B() { System.out.println(“Bye!”); } public static void main(String[] args) { B b = new B(); } } 当我运行程序B时,输出是: Hi! Bye! 问题 :为什么在创建class B对象时调用class A的构造函数 ? 我知道Binheritance了A中的所有实例或类变量以及所有方法,在这个意义上,B的对象具有A的所有特征以及B中定义的一些其他特征。但是,我不知道并且没有’我想象当我创建一个B类型的对象时,也会调用A的构造函数。 所以写下这个: B b = new B(); 创建两个对象 – 一个是B类,另一个是A类 […]