`

内部类:内部类的继承

阅读更多

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

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics