java 获取父类属性
时间: 2023-08-10 19:02:13 浏览: 57
在 Java 中,如果想要在子类中获取父类的属性,可以使用 `super` 关键字来访问。下面是一个示例代码:
```java
class Parent {
public int num = 10;
}
class Child extends Parent {
public void printNum() {
System.out.println(super.num);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.printNum(); // 输出 10
}
}
```
在上面的代码中,`Child` 类继承了 `Parent` 类,并且在 `Child` 类中定义了一个方法 `printNum()`。通过 `super.num` 可以访问到父类的属性 `num`,并将其输出。在 `main` 方法中创建了 `Child` 对象,并调用了 `printNum()` 方法,最终输出了父类属性的值。
相关问题
通过反射获取java 父类属性
可以通过Java反射机制来获取父类的属性,具体步骤如下:
1. 获取该类的Class对象,可以通过Class.forName()或者obj.getClass()方法获取;
2. 调用Class对象的getSuperclass()方法获取父类的Class对象;
3. 调用Class对象的getDeclaredFields()方法获取所有的属性,包括私有属性;
4. 遍历属性数组,获取父类的属性。
下面是一个示例代码:
```
public class Parent {
private int parentField;
}
public class Child extends Parent {
private int childField;
}
public class Test {
public static void main(String[] args) throws Exception {
Class<Child> childClass = Child.class;
Class<? super Child> parentClass = childClass.getSuperclass();
Field[] parentFields = parentClass.getDeclaredFields();
for (Field field : parentFields) {
System.out.println(field.getName());
}
}
}
```
输出结果为:
```
parentField
```
java反射获取父类和子类所有属性
要通过Java反射获取父类和子类的所有属性,我们可以使用Class类的getFields()和getDeclaredFields()方法。
- getFields()方法可以获取类中所有公共的(即用public修饰的)属性,包括父类中的公共属性。返回的是一个数组,其中包含了所有公共属性的Field对象。
- getDeclaredFields()方法可以获取类中所有声明的属性,包括私有的、受保护的和默认访问权限的属性,但不包括父类中的属性。返回的也是一个数组,其中包含了所有声明的属性的Field对象。
我们可以先获取子类的Class对象,然后利用getFields()和getDeclaredFields()方法获取子类自己声明的属性和从父类继承的公共属性。
再获取父类的Class对象,利用getFields()方法获取父类的公共属性。
下面是一个示例代码:
```java
import java.lang.reflect.Field;
public class ReflectionExample {
public static void main(String[] args) {
Child child = new Child();
// 获取子类Class对象
Class<?> childClass = child.getClass();
// 获取子类自己声明的属性和从父类继承的公共属性
Field[] childFields = childClass.getDeclaredFields();
for (Field field : childFields) {
System.out.println(field.getName());
}
// 获取父类Class对象
Class<?> parentClass = childClass.getSuperclass();
// 获取父类的公共属性
Field[] parentFields = parentClass.getFields();
for (Field field : parentFields) {
System.out.println(field.getName());
}
}
}
class Parent {
public int parentField;
}
class Child extends Parent {
private String childField;
}
```
在上面的示例中,我们创建了一个Parent类和一个Child类。Child类继承自Parent类,并在自己中声明了一个private的childField属性。
运行示例代码,结果会打印出子类和父类的所有属性名:
```
childField
parentField
```