Demo01:
package cn.dali.code22;
/*内部类:一个事物的内部包含另外一个事物,比如人包含一个心脏。心脏就是一个内部类,人就是外部类
分类:成员内部类
局部内部类(包含匿名内部类)
成员内部类的使用:
1.间接调用:通过创建外部类对象,调用外部类方法使用内部类
2.直接调用,直接创建一个内部类对象
格式:外部类名称.内部类名称 类名称 = new 外部类名称().new 内部类名称();
注意:当内部类与外部类的成员变量重名的时候,想在内部类中调用外部类成员变量,格式为
外部类.this.成员变量
局部内部类使用:
局部内部类是在外部类的成员方法当中,除了该成员方法,谁都不可以使用。
注意:
局部内部类访问所在的方法中的局部变量的时候,该变量一定要是有效final的。
(也就是final类型变量,或者声明后没有改变过的)
原因: 内部类的对象存活时间要比他所在的方法时间长。
* */
public class Demo01 {
public static void main(String[] args) {
/*调用成员内部类的第一种方法,间接调用
* 通过创建外部类对象,调用外部类方法使用内部类*/
Person person = new Person();
person.NewHeart();
System.out.println("================");
/*调用成员内部类第二种方法,直接调用
* 直接创建一个内部类对象。*/
Person.Heart heart = new Person().new Heart();
System.out.println("我是"+heart.getName());
heart.jump();
System.out.println("===================");
/*使用局部内部类*/
person.Usehand();
}
}
Person类:
package cn.dali.code22;
public class Person {
public void Usehand() {
int i =0;
//i=1; 注意:局部内部类使用该方法内的局部变量时,这个变量必须是final的或者没有改变的。
class Hand {//局部内部类
String name = "我是手";
public void Dazi() {
System.out.println(i);
System.out.println("我可以打字");
}
}
Hand hand = new Hand();
System.out.println(hand.name);
hand.Dazi();
}
public void NewHeart() {
Heart heart = new Heart();
System.out.println("我是" + heart.name);
heart.jump();
}
public class Heart {//成员内部类
private String name = "心脏";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void jump() {
System.out.println("我在跳!");
}
}
}