内部类
在类中定义类
内部类的访问特点:
a.内部类可以直接访问外部类的成员,包括私有
b.外部类要访问内部类的成员,必须创建对象
public class book {
String k = "外部";
book.mybook a = new book.mybook();//外部类名.内部类名 对象名 = new 外部类名.内部类名();
public void run(){
System.out.println(k+"i的值是"+a.i);
}
class mybook{
int i = 10 ;
}
}
内部类私有
内部类只希望被外部类中的方法操作,此时只有外部类可以控制
类似于,我的心脏只能由我的身体控制
package java04;
public class book {
public void printer(){
mybook m = new mybook();
m.run();
}
private class mybook{ //在内部类私有时,只有外部类可以访问,如果其他类想访问,只能在
//外部类提供一个printer方法来访问 其他类调用book的printer来访问内部类方法
int i = 10 ;
public void run(){
System.out.println(i);
}
}
}
静态成员内部类
访问与程序一中相同
局部内部类:
与局部变量相同,仅在该方法中有效
public class book {
public void run(){
class Inner{ //局部内部类,只能在其所在方法中访问
public void innerrun(){
System.out.println("我是局部内部类");
}
}
Inner i = new Inner();//这条语句只能在内部类之后出现,否则报错
i.innerrun(); //外部类只需要创建book对象并调用run方法就可以调用内部类方法
}
}
public class booktest {
public static void main(String[] args) {
new book().run();
}
}
运行结果:
匿名内部类
内部类的简化写法,因为没有名字,所以只能使用一次
前提:存在一个类或者是接口,这里的类可以是具体类也可以是抽象类
格式 new 类名或接口名(){
重写方法;
}
本质是一个继承了该类或者实现了改接口的子类匿名对象,且只针对重写一个方法时使用
开发中可以把匿名内部类当做一个对象传入