`
xiefeifeihu
  • 浏览: 99092 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在父类获取子类属性

阅读更多

在父类中能获取子类的属性吗?一般情况下是不行的,因为孩子尚未出世哪里来的属性。但有时需要在父类处理该类(包含子类)的所有属性,该怎么做呢,有种方法能解决——在父类中将子类的实例引用进来。假设BaseClass是基类,有个getAll方法用以获取该类的所有属性。SubClass继承子BaseClass,SSClass继承自SubClass,SSClass的实例调用getAll方法时获取SSClass及其父类的所有属性。具体做法如下:

import java.lang.reflect.Field;

public class BaseClass {

	private String a;
	private int b;
	private final BaseClass bc = setBC();

	// public BaseClass() {
	// bc = setBC();
	// }

	private BaseClass setBC() {
		return this;
	}

	public void getAll() {
		Class clazz = this.bc.getClass();
		do {
			Field[] fields = clazz.getDeclaredFields();
			for (Field f : fields) {
				System.out.println(f.getName());
			}
			clazz = clazz.getSuperclass();
		} while (clazz != Object.class);
	}
}
这里BaseClass bc就是子类的引用,构造子类SubClass或SSClass实例时,调用setBC方法将子类的引用获得。setBC中return this这里的this是子类的实例,不是父类的。setBC也可以在父类构造函数中调用,效果是一样的,如上面代码的注释块。

子类就不用关心任何事了,不管它是否有自己的构造方法:

public class SubClass extends BaseClass {

	@ShareObject
	private boolean c;

}

public class SSClass extends SubClass {

	private String ss;

	public SSClass(int i) {
		ss = "";
	}

}

测试:

	@Test
	public void get() {
		SSClass sc = new SSClass(1);
		sc.getAll();
	}

输出内容:

ss
c
a
b
bc

分享到:
评论

相关推荐

    父类赋值给子类

    这里我们将深入探讨如何在 C# 中进行父类属性到子类属性的赋值,并考虑效率、灵活性和代码可维护性。 首先,让我们理解一下父类和子类的概念。在 C# 中,父类(也称为基类或超类)是定义了一组属性和方法的类,而...

    java反射获取所有属性,获取所有get方法,包括子类父类

    在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细介绍这些内容。 1. **获取所有属性**: 在Java中,`java.lang.Class` 类提供了获取类属性的方法。...

    java反射操作父类所有属性和方法

    为了获取父类的所有属性,我们需要使用`Class`对象的`getDeclaredFields()`和`getFields()`方法,这两个方法分别返回类声明的所有字段(包括私有字段)和所有公有字段。但是,这些方法只能获取当前类的字段,不能...

    子类调用抽象父类.zip

    6. **子类属性与方法**:子类可以有自己的属性和方法,也可以调用父类方法。 7. **构造函数调用**:子类可以使用`super`调用父类构造器。 以上就是关于“子类调用抽象父类”这一主题的主要内容,理解并熟练运用这些...

    C#中子类调用父类的实现方法

    在C#编程语言中,子类继承父类后,可以访问和使用父类中的成员,包括方法和属性。本文将详细讲解如何在C#中实现子类调用父类的方法。 首先,我们要理解继承的基本概念。在C#中,一个类(子类)可以继承另一个类...

    PHP父类调用子类方法的代码例子

    在面向对象编程中,封装的概念使得方法和属性对外界隐藏,而继承则是子类继承父类的特性。在继承中,父类可以决定哪些成员是公开的,哪些是受保护的,哪些是私有的。公开成员可以在任何地方被访问,受保护成员可以在...

    JS在子类中用Object.getPrototypeOf去调用父类方法

    而第二种方式则更底层,通过获取子类实例的原型,然后使用`call`或`apply`方法来改变`this`的指向并执行父类方法。 使用`Object.getPrototypeOf`的优点在于,即使父类的方法被重写或者删除,只要该方法存在于原型链...

    WPF继承_子类继承父类,实现跨类调用方法

    在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...

    java自己修改的支持public属性、父类属性的json自动编译的工具类

    6. **自定义序列化与反序列化**:如果`JsonUtil`使用了Jackson库,它可以创建`JsonSerializer`和`JsonDeserializer`的子类来定制序列化和反序列化的行为,特别是在处理public属性和父类属性时。对于Gson,可以使用`@...

    JAVA 子类继承父类的范例 可直接运行

    如果需要在子类中访问父类的私有成员,则需要在父类中提供公共或受保护的方法来获取这些值。子类通过重写父类的方法,可以提供特定于子类的行为,也可以使用`super`关键字调用父类的版本。 关于继承的更多细节,...

    java子类继承父类实例-披萨的选择实现代码

    在本篇文章中,我们在PeiGen和SeaFood子类中重写了父类的展示方法,以便实现自己的展示逻辑。 四、Java多态性的应用 在本篇文章中,我们使用了Java多态性的应用,通过定义不同的子类来实现不同的比萨制作选择。在...

    利用反射子父类赋值高效工具类案例extends_setvalue.zip

    在“利用反射子父类赋值高效工具类案例extends_setvalue.zip”中,我们关注的是如何通过反射机制高效地为子类和父类的属性赋值。这种技术在数据持久化和查询结果映射到对象模型时特别有用,可以减少冗余代码并优化IO...

    java判断class子类或父类的实例方法

    在本篇文章中,我们学习了如何使用 Java 中的反射机制来判断类的继承关系,包括判断一个类是否为基本数据类型、判断一个类是否为另一个类的子类或父类,以及如何获取泛型类型实例。这些技术在日常开发中非常实用,...

    easyui树 改变联动关系,选择父,同时选择子;子全部取消,父不取消

    通过设置`data-url`属性,可以从服务器获取JSON数据,或者直接通过JavaScript代码将JSON数据传递给树组件。 关于兼容性问题,你提到在IE和谷歌浏览器上都未发现不兼容现象。这表明这个联动关系的实现是跨浏览器的,...

    【Python】使用super()函数进行类的继承,将父类的方法和属性继承在子类的里。

    它允许我们创建一个新类(子类),该类可以获取另一个类(父类)的属性和方法。`super()`函数是Python中用于实现多继承和调用父类方法的关键工具。在本示例中,我们将深入探讨如何使用`super()`函数以及它在类继承中...

    Python 实现子类获取父类的类成员方法

    总结起来,Python中子类获取父类的类成员方法可以通过元类实现,这使得子类在定义时就能访问到父类的所有非私有类变量,而不需要实例化对象或直接引用父类。这种做法增加了代码的灵活性,同时也保持了类层次结构的...

    学学Python_43类的成员02 调用父类构造函数

    在这个例子中,`Child`类继承了`Parent`类,并且在其`__init__`方法中调用了`super().__init__(name)`来初始化父类的`name`属性。这样,当创建`Child`类的实例时,父类的数据成员也会被正确设置。 标签“未绑定 ...

    继承与接口的含义以及其子类相关的含义

    继承是类之间的一种关系,子类继承自父类,从而获取了父类的部分特性。这种关系模拟了现实世界中的遗传关系,使得子类可以重用和扩展父类的属性和方法。Java中的继承是单继承的,也就是说一个子类只能有一个直接父类...

Global site tag (gtag.js) - Google Analytics