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";
}