内部类分类:成员内部类
局部内部类
静态内部类
匿名内部类
成员内部类
定义: 在一个类中 定义一个类 为成员内部类(简单理解)
访问特点:
(1 )内部类可以直接访问内部类的成员间,包括私有成员
( 2 ) 外部类要访问内部类的成员,必须要建立内部类的对象。
访问秘诀:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
代码:
public class neibu {
private int a = 10;
public void s1() {
System.out.println("外部类" + a);
}
class neibulei {
int b = 20;
public void s2() {
System.out.println("内部类" + b);
}
}
}
测试类:
public static void main(String[] args) {
neibu.neibulei c = new neibu().new neibulei();
}
局部内部类
定义:在外部类中创建一个外部类方法,新建一个类为局部内部类。(简单理解)
访问秘诀:
在外部类方法中,局部内部类外,创建内部类对象,对象名调用内部类方法。
测试类:直接创建外部类对象,调用方法即可
代码:
public class neibu {
int a = 10;
public void s1() {
System.out.println("外部类" + a);
class jubu {
int b = 20;
public void s2() {
System.out.println("局部内部类" + b);
}
}
jubu c = new jubu();
c.s2();
}
}
测试类:
public static void main(String[] args) {
neibu c = new neibu();
c.s1();
}
静态内部类
定义:使用static关键字修饰的成员内部类。
注意: 1.静态内部类只能访问外部类的静态成员
2.外部类访问静态内部类时,可以跳过外部类从而直接访问内部类成员
访问秘诀:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
代码:
public class neibu {
static int a=10;
static class jingtailei{
int b = 20;
public void s1(){
System.out.println("外部类"+a);
System.out.println("内部类"+b);
}
}
}
测试类:
public class Text {
public static void main(String[] args) {
neibu.jingtailei c = new neibu.jingtailei();
c.s1();
}
}
匿名内部类
定义: 接口的实现类没有名字为匿名内部类
理解: 定义一个接口,一个抽象方法,直接新建接口对象重写抽象方法,没有名字的实现类为匿名内部类。
代码:
public interface neibu {
void s2();
}
测试类:
public static void main(String[] args) {
neibu c = new neibu() {
@Override
public void s2() {
System.out.println("这是一个匿名内部类的重写抽象方法");
}
};
c.s2();
}