Java中如何实现并正确输出父类中的属性?
- 后端开发
- 2025-10-14
- 5
在Java中,要输出父类的属性,通常有以下几种方法:
通过父类引用访问
- 定义父类:首先定义一个父类,包含一些属性。
- 创建子类:创建一个继承自父类的子类。
- 创建实例:创建子类的实例。
- 访问属性:通过子类实例访问父类的属性。
示例代码:

通过父类引用访问
- 定义父类:同上。
- 创建子类:同上。
- 创建实例:同上。
- 通过父类引用访问:通过父类类型的引用访问子类实例的父类属性。
示例代码:
class Parent { public int age; public Parent(int age) { this.age = age; } } class Child extends Parent { public String name; public Child(int age, String name) { super(age); this.name = name; } } public class Main { public static void main(String[] args) { Parent parent = new Child(10, "Alice"); System.out.println("Parent's age: " + parent.age); } }
通过super关键字
- 定义父类:同上。
- 创建子类:同上。
- 创建实例:同上。
- 通过super关键字访问:在子类中,使用super关键字访问父类的属性。
示例代码:

通过反射
- 定义父类:同上。
- 创建子类:同上。
- 创建实例:同上。
- 使用反射访问:通过反射API访问父类的属性。
示例代码:
class Parent { public int age; public Parent(int age) { this.age = age; } } class Child extends Parent { public String name; public Child(int age, String name) { super(age); this.name = name; } } public class Main { public static void main(String[] args) { try { Child child = new Child(10, "Alice"); Class<?> clazz = child.getClass().getSuperclass(); Object age = clazz.getMethod("age").invoke(child); System.out.println("Child's age: " + age); } catch (Exception e) { e.printStackTrace(); } } }
FAQs
Q1:在Java中,为什么有时候直接通过子类实例访问父类属性,有时候却不行?

A1: 这是因为Java中存在隐藏和重写机制,如果父类和子类中有同名属性,且子类没有使用super关键字显式调用父类属性,那么子类实例会访问自己的属性,而不是父类的属性。
Q2:在Java中,如何通过反射访问父类的私有属性?
A2: 通过反射可以访问任何类的属性,包括私有属性,这通常不推荐,因为它破坏了封装性,要访问私有属性,可以使用java.lang.reflect.Field类的setAccessible(true)方法。
try { Field ageField = Parent.class.getDeclaredField("age"); ageField.setAccessible(true); int age = (int) ageField.get(parent); System.out.println("Parent's age: " + age); } catch (Exception e) { e.printStackTrace(); }