内部类:内部类的继承
程序员文章站
2022-05-22 08:37:45
...
一、父类和子类在同一个外部类中
package org.lgy.study.innerclass; public class InnerClassInheritance{ //如果父类是静态的,则子类既可以是静态的也可以是非静态的; //如果父类是非静态的,则子类只能是非静态的。 public static class InBase{ public InBase(String msg){ System.out.println("InBase's constructor : " + msg); } public void method1(){ System.out.println("method1 in InBase"); } } /* 子类和父类位于同一个外部类中,这种继承和普通的继承没有任何区别。 */ public class InSub extends InBase{ public InSub(String msg){ super(msg); System.out.println("InSub's constructor"); } //子类中的method1方法会覆盖掉父类中的method1方法 public void method1(){ System.out.println("method1 in InSub"); super.method1(); } } }
package org.lgy.study.main; import org.lgy.study.innerclass.InnerClassInheritance; public class InnerClassMain{ public static void main(String[] args){ InnerClassInheritance.InBase inBase = null; inBase = new InnerClassInheritance().new InSub("*****"); inBase.method1(); } }
二、子类不在父类所在的外部类中
1、父类为非静态内部类
package org.lgy.study.innerclass; public class InnerClassInheritance{ //如果父类是静态的,则子类既可以是静态的也可以是非静态的; //如果父类是非静态的,则子类只能是非静态的。 public class InBase{ public InBase(String msg){ System.out.println("InBase's constructor : " + msg); } public void method1(){ System.out.println("method1 in InBase"); } } }
package org.lgy.study.innerclass; public class InSub extends InnerClassInheritance.InBase{ public InSub(InnerClassInheritance obj){ //因为子类InSub的父类是一个非静态内部类,所以在调用它的构造器时,必须使用一个其外部类的对象。 //也就是说,必须显式创建一个外部类的对象并传入子类,然后在子类中使用这个外部类对象来调用 //非静态内部类的构造器 obj.super("*****"); System.out.println("InSub's constructor"); } public void method1(){ //子类中的method1方法会覆盖掉父类中的method1方法 System.out.println("method1 in InSub"); //当创建完子类的对象之后,就可以像普通子类一样通过super来调用父类的方法 super.method1(); } }
2、父类为静态内部类
package org.lgy.study.innerclass; public class InnerClassInheritance{ //如果父类是静态的,则子类既可以是静态的也可以是非静态的; //如果父类是非静态的,则子类只能是非静态的。 public static class InBase{ public InBase(String msg){ System.out.println("InBase's constructor : " + msg); } public void method1(){ System.out.println("method1 in InBase"); } } }
package org.lgy.study.innerclass; //继承静态内部类就像继承普通类一样 public class InSub extends InnerClassInheritance.InBase{ public InSub(){ //因为父类是一个静态内部类,它属于外部类,调用它的构造器时无需创建对象 super("*****"); System.out.println("InSub's constructor"); } public void method1(){ //子类中的method1方法会覆盖掉父类中的method1方法 System.out.println("method1 in InSub"); //当创建完子类的对象之后,就可以像普通子类一样通过super来调用父类的方法 super.method1(); } }
public class InnerClassMain{ public static void main(String[] args){ InnerClassInheritance.InBase inBase = new InSub(); inBase.method1(); } }
上一篇: 很蛋疼的三个有关问题