相当于实例变量的内部类
package Test.Test04;
public class Test04 {
public static void main(String args[]){
Human.Dog a = new Human().new Dog("yang",10);
a.print();
System.out.println(a);
Human b = a.human();
b.print();
System.out.println(b);
}
}
class Human {
public String name="huang";
public int age=100;
public void print(){
System.out.println("Human "+name+" "+age);
}
public class Dog {
public String name;
public int age;
Dog(String name, int age) {
this.name = name;
this.age = age;
}
public void print() {
String humanName = Human.this.name;
int humanAge = Human.this.age;
Human.this.print();
System.out.println("Dog "+this.name + " " +this.age+" Human "+humanName+" "+humanAge);
}
public Human human(){
return Human.this;
}
}
}
此种内部类想要实例化必须先实例外部类,既 Human.Dog a = new Human().new Dog(“yang”,10);另外需要注意的是:在实例化的内部类方法体中有指向外部类的指针既:Human.this,我们可以用这个指针访问外部类属性和方法,既: Human.this.print(); Human.this.print(); Human.this.name;
相当于静态变量的内部类
package Test.Test03;
public class Test03 {
public static void main(String args[]){
Human.Dog dog1 = new Human.Dog("大黄",10);
System.out.println(dog1);
dog1.print();
Human.Dog dog2 = new Human.Dog("大黑",11);
dog2.print();
Human human = new Human("yang",20);
human.feed(dog1);
human.feed(dog2);
}
}
class Human {
public static String country="china";
public static int birth=5000;
public int age;
public String name;
Human(String name,int age){
this.name = name;
this.age = age;
}
public void feed(Dog dog){
System.out.println("一个"+age+"岁的叫"+name+"的人正在喂"+dog.name);
}
public static void print(){
System.out.println("Human "+country+" "+birth);
}
public static class Dog {
public String name;
public int age;
Dog(String name, int age) {
this.name = name;
this.age = age;
}
public void print(){
String humanName = Human.country;
int humanAge = Human.birth;
Human.print();
System.out.println("dog "+this.name+" "+this.age+" Human "+humanName+" "+humanAge);
}
}
}
这种内部类是被static修饰的,所以是静态的,静态内部类是也可以被实例化,但不需要实例化外部类: Human.Dog dog1 = new Human.Dog(“大黄”,10);需要注意的是:静态内部类中可以直接访问外部类的静态变量和静态方法,不能直接访问成员变量与成员方法,因为它的外部类没实例化