public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
...
//HashMap为了让键元素key具有集合的功能,而继承AbstractSet
final class KeySet extends AbstractSet<K>{
....
}
...
}
public class OutClass {
String name = "OutClass";
static String nickName = "out";
void hello(){}
static void hi(){}
//InnerClass就像OutClass内部成员一样可以访问name、nickName属性|hello(),hi()
class InnerClass{
String innerName = "InnerClass";
void test(){
System.out.println(innerName);
System.out.println(name);
System.out.println(nickName);
hello();
hi();
}
}
}
public class OutClass {
public class InnerClass{}
//只能在非静态方法返回InnerClass 实例
public InnerClass getInnerClass(){
return new InnerClass();
}
}
----调用外部类对象的普通方法获取内部类
OutClass outClass = new OutClass();
OutClass.InnerClass innerClass = outClass.getInnerClass();
public class OutClass{
class InnerClass{}
}
//OutClass$InnerClass.class
final com.OutClass this$0; //InnerClass 存在一个指向外部类对象的引用
descriptor: Lcom/OutClass;
flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC
public class OutClass {
String name = "OutClass";
static String nickName = "out";
void hello(){}
static void hi(){}
static class StaticInnerClass{
String innerName = "staticInnerClass";
static String staticName = "staticName";
//无法使用OutClass的普通属性和普通方法,静态的可以
void test(){
System.out.println(innerName);
System.out.println(nickName);
System.out.println(staticName);
hi();
}
static void staticTest(){ }
}
public class Test {
public static void main(String[] args) {
sayHello("shu");
}
static void sayHello(String hello){
//InnerClass的访问范围和sayHello访问范围一致
class InnerClass {
public void run(String name){
System.out.println(name);
System.out.println(hello);
}
}
InnerClass innerClass = new InnerClass();
innerClass.run("hello");
}
}
interface CInterface { void test(); }
class Outer{
public void hello(CInterface cInterface) {
cInterface.test();
}
}
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
outer.hello(new CInterface(){
public void test(){
System.out.println("test CInterface");
}
});
}
}