Class A含3个方法、Class B含2个方法且继承Class A,如何通过Class B对象调用Class A方法?
如何通过子类B的对象调用父类A的方法?
在面向对象的继承体系中,子类B继承父类A后,默认会拥有父类的非私有方法,调用方式分以下几种情况:
1. 父类方法未被重写时直接调用
如果父类A的方法是public、protected,或者与子类B处于同一包下的默认权限(无修饰符),且子类没有重写该方法,直接通过B的对象调用即可:
// 父类A class A { public void methodA1() { System.out.println("A的方法1"); } protected void methodA2() { System.out.println("A的方法2"); } void methodA3() { // 同包默认权限 System.out.println("A的方法3"); } } // 子类B class B extends A { public void methodB1() { System.out.println("B的方法1"); } } // 调用示例 public class Demo { public static void main(String[] args) { B bInstance = new B(); bInstance.methodA1(); // 调用父类public方法 bInstance.methodA2(); // 调用父类protected方法 bInstance.methodA3(); // 同包下调用父类默认权限方法 } }
2. 父类方法被子类重写时调用父类版本
如果子类B重写了父类A的方法,想调用父类的原始版本,有两种方式:
- 子类内部调用:使用
super关键字直接指定调用父类的方法 - 外部调用:通过反射机制调用父类的方法(仅在必要时使用,会破坏封装性)
子类内部用super调用示例:
class A { public void methodA1() { System.out.println("A的methodA1"); } } class B extends A { @Override public void methodA1() { System.out.println("B重写的methodA1"); super.methodA1(); // 调用父类的原始方法 } } public class Demo { public static void main(String[] args) { B bInstance = new B(); bInstance.methodA1(); // 先输出B的版本,再输出A的版本 } }
外部通过反射调用示例:
public class Demo { public static void main(String[] args) { B bInstance = new B(); try { // 获取父类A的methodA1方法 java.lang.reflect.Method parentMethod = A.class.getMethod("methodA1"); parentMethod.invoke(bInstance); // 调用父类的原始方法 } catch (Exception e) { e.printStackTrace(); } } }
3. 注意访问权限限制
- 如果父类A的方法是
private,子类B无法继承该方法,也不能直接调用。只能通过父类提供的public/protected方法间接访问,或者通过反射(不推荐,违背封装原则)。
内容的提问来源于stack exchange,提问作者kinjal
相关产品推荐
相关产品推荐

