一、父类和子类在同一个外部类中
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(); } }
相关推荐
使用内部类最吸引人的原因是,每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 内部类使得多重继承的解决方案变得完整。接口解决了部分...
内部类可以作为对外部类的多态性实现的一部分,通过继承外部类的内部类,可以创建具有不同行为的实例。 7. 内部类与垃圾回收: 当外部类的引用丢失时,如果内部类对象没有其他引用链,那么整个对象(包括内部类)...
1. 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 2. 使用内部类可以使我们的类继承多个具体类或抽象类。 五、内部类的工作机理 1. ...
2. 使用组合而非继承:有时,内部类的目的是为了表示与外部类的关联。我们可以使用对象的组合来代替,创建一个新类并持有外部类的引用。 ```java public class OuterClass { private int outerVar = 10; } public...
它们常用于实现接口或继承一个类,特别是在事件处理、回调机制和简短的辅助类中。创建匿名内部类的方式是在实例化类时直接定义类的实现,不需要声明类名。 3. **方法参数内部类**:这是一种特殊类型的局部内部类,...
7. 内部类与继承:内部类可以继承任何类,包括抽象类和接口。这为设计提供了更大的灵活性,可以创建具有特定行为的子类。 8. 内部类的内存模型:内部类对象存储在外部类对象的堆内存中,这使得内部类可以直接访问...
匿名内部类是一种没有名字的内部类,它常用于实现接口或者继承一个类,并且只需要一次使用的情况。其基本语法形式如下: ```java new ParentClass() { @Override public void method() { // 实现代码 } }; ``` ...
匿名内部类可以继承式、接口式、参数式等多种方式实现。 在实际开发中,内部类可以帮助我们更好的组织代码、提高代码的可读性和维护性。同时,内部类也可以帮助我们避免代码的重复,提高代码的效率。
它们可以实现接口或继承类,并且通常用于快速创建适配器或回调对象。 在Android开发中,内部类常与接口一起使用,以实现弱耦合。例如,一个内部类可以实现一个接口,以便在不暴露具体实现的情况下定义行为。这种...
同时,内部类可以实现多重继承的效果,因为一个内部类可以实现多个接口,同时外部类可以继承一个类。 在`Java集合排序及java集合类详解.PDF`文档中,你可以找到关于集合排序和不同集合类的详细讲解。例如,如何使用...
当内部类实现了接口或者继承了抽象类时,它必须实现或覆盖接口或抽象类的所有方法。 9. 内部类与外部类的交互 内部类可以覆盖外部类的方法,内部类也可以访问外部类的私有变量。 10. Java内部类的限制和注意事项 ...
4. 匿名内部类:这是一种没有名字的内部类,通常用于快速实现简单的需求,如创建一个实现了特定接口或继承自特定类的对象。匿名内部类的定义通常紧跟在`new`关键字之后,且不能包含构造方法,也不能有静态成员或方法...
使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,...
2. 多重继承模拟:Java 不支持多继承,但内部类可以实现对多个接口的继承,从而达到类似于多重继承的效果。 3. 事件处理:匿名内部类常用于GUI编程中的事件监听,可以快速创建事件处理器并关联到组件。 4. 封装:...
此外,内部类可以实现多重继承的效果,因为一个内部类可以实现多个接口,同时外部类可以继承一个类。这种组合方式使得Java在单继承的限制下仍能实现多态性。 总之,Java的内部类提供了一种灵活的方式来组织和设计...
它们常用于实现接口或继承类,特别是在事件处理和回调机制中。 5. **静态内部类:** 静态内部类与普通成员内部类的区别在于,静态内部类不持有对外部类的隐式引用,因此可以不依赖外部类对象而实例化。静态内部类...
- 匿名内部类通常用于简洁地实现一个接口或继承一个类,常用于事件监听器或回调函数的定义。 内部类的应用场景广泛,如在设计模式中的单例模式、工厂模式,以及Swing组件的事件处理等。它们提供了更灵活的封装和...
内部类的主要优点在于它可以实现多重继承的效果,因为每个内部类都可以独立继承一个类或实现一个接口,即使外部类已经继承了另一个类。这种能力在某些设计模式中非常有用,如适配器模式和策略模式。 总结一下,Java...
- 内部类可以继承其他类或者实现接口。 - 在内部类中实现接口时,可以使用接口方法来实现具体的功能。 6. 内部类的访问权限:内部类可以使用private、protected、public等访问修饰符来限制其访问权限。 7. 匿名...