内部类
内部类
概念:内部类与成员变量与成员方法相似,在类中方法外的是成员内部类,在方法中的是局部内部类。
特点:
- 内部类可以直接使用类中的成员变量,即使是成员变量
- 类如果想使用内部类的变量方法,需要先创建内部类的变量
成员内部类
在成员位值的是成员内部类。
public class InnerClass {
private int a=10;
public static void main(String[] args) {
InnerClass innerClass=new InnerClass();
innerClass.print();
}
public void print(){
A a=new A();
a.method();
}
class A{
public void method(){
System.out.println(a);
}
}
}
局部内部类
在局部位置的就是局部内部类,匿名内部类,也是局部内部类
public class InnerClass2 {
private int a=10;
public void method(){
class B{
public void inmethod(){
System.out.println(a);
}
}
B b=new B();
b.inmethod();
}
public static void main(String[] args) {
InnerClass2 innerClass2=new InnerClass2();
innerClass2.method();
}
匿名内部类
没有名字的内部类,匿名内部类也是局部内部类
注意匿名内部类与匿名对象的区别,匿名对象是没有名字的对象,既没有变量指向的变量
public interface TestNoNameClass {
void eat();
}
//这里定义一个接口
public class NoNameClass {
//类中写了个方法,方法参数是定义的接口
public void goeat(TestNoNameClass testNoNameClass){
testNoNameClass.eat();
}
public static void main(String[] args) {
NoNameClass noNameClass=new NoNameClass();
//这里TestNoNameClass是一个接口,为什么还可以new对象呢,实际上这里是出现了一个实现了TestNoNameClass接口的类,
// 这个类没有名字,仅使用一次,所以称为匿名内部类
noNameClass.goeat(new TestNoNameClass() {
@Override
public void eat() {
System.out.println("快点去吃饭");
}
});
}
}