`

内部类:内部类的继承

 
阅读更多

一、父类和子类在同一个外部类中

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();
	}
}

 

分享到:
评论

相关推荐

    java内部类总结(含概念和实例)

    使用内部类最吸引人的原因是,每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 内部类使得多重继承的解决方案变得完整。接口解决了部分...

    关于内部类的整理 内部类.xmind

    内部类可以作为对外部类的多态性实现的一部分,通过继承外部类的内部类,可以创建具有不同行为的实例。 7. 内部类与垃圾回收: 当外部类的引用丢失时,如果内部类对象没有其他引用链,那么整个对象(包括内部类)...

    Java内部类总结,内部类的共同特征,内部类的分类等

    1. 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 2. 使用内部类可以使我们的类继承多个具体类或抽象类。 五、内部类的工作机理 1. ...

    内部类示例

    2. 使用组合而非继承:有时,内部类的目的是为了表示与外部类的关联。我们可以使用对象的组合来代替,创建一个新类并持有外部类的引用。 ```java public class OuterClass { private int outerVar = 10; } public...

    java 内部类使用(内部匿名类)

    它们常用于实现接口或继承一个类,特别是在事件处理、回调机制和简短的辅助类中。创建匿名内部类的方式是在实例化类时直接定义类的实现,不需要声明类名。 3. **方法参数内部类**:这是一种特殊类型的局部内部类,...

    java中的内部类

    7. 内部类与继承:内部类可以继承任何类,包括抽象类和接口。这为设计提供了更大的灵活性,可以创建具有特定行为的子类。 8. 内部类的内存模型:内部类对象存储在外部类对象的堆内存中,这使得内部类可以直接访问...

    Java4Android 35_内部类和匿名内部类

    匿名内部类是一种没有名字的内部类,它常用于实现接口或者继承一个类,并且只需要一次使用的情况。其基本语法形式如下: ```java new ParentClass() { @Override public void method() { // 实现代码 } }; ``` ...

    内部类分类及应用

    匿名内部类可以继承式、接口式、参数式等多种方式实现。 在实际开发中,内部类可以帮助我们更好的组织代码、提高代码的可读性和维护性。同时,内部类也可以帮助我们避免代码的重复,提高代码的效率。

    内部类 匿名内部类 内部接口 对比说明

    它们可以实现接口或继承类,并且通常用于快速创建适配器或回调对象。 在Android开发中,内部类常与接口一起使用,以实现弱耦合。例如,一个内部类可以实现一个接口,以便在不暴露具体实现的情况下定义行为。这种...

    java 集合和内部类资料

    同时,内部类可以实现多重继承的效果,因为一个内部类可以实现多个接口,同时外部类可以继承一个类。 在`Java集合排序及java集合类详解.PDF`文档中,你可以找到关于集合排序和不同集合类的详细讲解。例如,如何使用...

    Java内部类.pdf

    当内部类实现了接口或者继承了抽象类时,它必须实现或覆盖接口或抽象类的所有方法。 9. 内部类与外部类的交互 内部类可以覆盖外部类的方法,内部类也可以访问外部类的私有变量。 10. Java内部类的限制和注意事项 ...

    JAVA_内部类_反射机制

    4. 匿名内部类:这是一种没有名字的内部类,通常用于快速实现简单的需求,如创建一个实现了特定接口或继承自特定类的对象。匿名内部类的定义通常紧跟在`new`关键字之后,且不能包含构造方法,也不能有静态成员或方法...

    Java内部类总结[参考].pdf

    使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,...

    java方面内部类学习

    2. 多重继承模拟:Java 不支持多继承,但内部类可以实现对多个接口的继承,从而达到类似于多重继承的效果。 3. 事件处理:匿名内部类常用于GUI编程中的事件监听,可以快速创建事件处理器并关联到组件。 4. 封装:...

    Class详解内部类等

    此外,内部类可以实现多重继承的效果,因为一个内部类可以实现多个接口,同时外部类可以继承一个类。这种组合方式使得Java在单继承的限制下仍能实现多态性。 总之,Java的内部类提供了一种灵活的方式来组织和设计...

    java内部类详解共10页.pdf.zip

    它们常用于实现接口或继承类,特别是在事件处理和回调机制中。 5. **静态内部类:** 静态内部类与普通成员内部类的区别在于,静态内部类不持有对外部类的隐式引用,因此可以不依赖外部类对象而实例化。静态内部类...

    java语言--内部类总结

    - 匿名内部类通常用于简洁地实现一个接口或继承一个类,常用于事件监听器或回调函数的定义。 内部类的应用场景广泛,如在设计模式中的单例模式、工厂模式,以及Swing组件的事件处理等。它们提供了更灵活的封装和...

    Java内部类总结.pdf

    内部类的主要优点在于它可以实现多重继承的效果,因为每个内部类都可以独立继承一个类或实现一个接口,即使外部类已经继承了另一个类。这种能力在某些设计模式中非常有用,如适配器模式和策略模式。 总结一下,Java...

    编程语言Java内部类.pdf

    - 内部类可以继承其他类或者实现接口。 - 在内部类中实现接口时,可以使用接口方法来实现具体的功能。 6. 内部类的访问权限:内部类可以使用private、protected、public等访问修饰符来限制其访问权限。 7. 匿名...

Global site tag (gtag.js) - Google Analytics