java 内部类 知识梳理

java面试题网站:www.javaoffers.com
java内部类和外部类之间的关系. 通过代码加注释的形式说明.


package com.mh.others.class_;
import java.lang.reflect.Constructor;

/**
 * 内部类的
 * @author mingjie
 *
 */
public class OutClassAndInnerClass extends OutClassAndInnerClassParent{
	public String name = "OutClassAndInnerClass";
	public void outClass() {
		System.out.println(name);
	}
	  class InnerClass extends InnerClassParent{
		String name = "InnerClass";
		
		//调用内部类name
		public void selfName() {
			System.out.println(name);
		}
		//调用内部类的父类name
		public void selfParentName() {
			System.out.println(super.name);
		}
		//在内部类调用外部类name
		public void outClassName() {
			System.out.println(OutClassAndInnerClass.this.name);
		}
		//在内部类调用外部类的父类name
		public void outClassPranetName() {
			System.out.println(OutClassAndInnerClass.super.name);
		}
		/* 非静态内部类中不能声明 静态方法
		 * public static void get() { System.out.println("this is InnerClass"); }
		 */

		//内部类默认构造方法,都会存在一个隐藏的外部类参数
		public InnerClass() {
		}

		//内部类的构造方法,都会存在一个隐藏的外部类参数
		public void constructorInnerClass() throws NoSuchMethodException {
			//反射获取 调用 InnerClass的默认构造, 但是必须要传入所属的外部类class 
			Constructor<InnerClass> declaredConstructor = InnerClass.class.getDeclaredConstructor(OutClassAndInnerClass.class);
			System.out.println(declaredConstructor.getName());
		}
	}
	  /**
	   * 静态内部类
	   * @author mj
	   *
	   */
	static class StaticClassInner{
		private String name = "cmj";
	}

	/**
	 * 局部内部类
	 * @return
	 */
	 public InnerClassParent getInnnerCLass() {

		class InnerClass extends InnerClassParent {
			String lable ;
			private InnerClass(String lable) { //似有构造类
				this.lable = lable;
			}
		}
		return new InnerClass("test");//在方法域中依然可以调用 局部内部类中的似有构造

	}
	 
	 public static void main(String[] args) throws Exception {

		 OutClassAndInnerClass out = new OutClassAndInnerClass();
		 InnerClass s = out.new InnerClass();
		  s.selfName();
		  s.selfParentName();
		  s.outClassName();
		  s.outClassPranetName();
		  s.constructorInnerClass();
	}

}

class OutClassAndInnerClassParent{
	String name = "OutClassAndInnerClassParent";
}

class InnerClassParent{
	String name = "InnerClassParent";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值