内部类的用法
相当于实例变量的内部类
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);需要注意的是:静态内部类中可以直接访问外部类的静态变量和静态方法,不能直接访问成员变量与成员方法,因为它的外部类没实例化