内部类相当于我们可以在类的内部再定义类.
外面的类->外部类.
里面定义的类->内部类
一 : 内部类分类
-
成员内部类
声明在类内部且方法外的
① 可以有修饰符,可以调用外部类的属性方法
class Person{
String name = "BOSS";
int age;
//成员内部类(非静态)
class Bird{
public void info() {
//调用外部类方法
show();
// 调用外部类的属性
System.out.println(Person.this.name);
}
}
public void show() {
System.out.println("我是Show");
}
}
②具有类的特点,可以被abstract 修饰,还可以其内部定义属性,方法构造器.
class Person{
String name = "BOSS";
int age;
//成员内部类(非静态)
class Bird{
//内部类属性
String name = "king";
int age;
//内部类定义方法
public void info() {
//调用外部类方法
show();
// 调用外部类的属性
System.out.println(Person.this.name);
}
//定义构造器
public Bird() {
}
}
public void show() {
System.out.println("我是Show");
}
}
③静态内部类 用static 修饰
class Person{
String name = "BOSS";
int age;
//成员内部类(静态内部类)
static class Dog {
}
public void show() {
System.out.println("我是Show");
}
}
-
内部类调用
非静态
//创建非静态的内部类对象,必须先创建外部类的对象,通过外部类的对象调用内部类的构造器.
Person p = new Person();
Person.Bird b = p.new Bird();
b.info();
静态
//创建静态内部类的对象,可以直接通过外部类调用静态内部类的构造器
// Person.Dog d = new Person.Dog();
-
局部内部类
声明在类的方法里
class OuterClass{
//局部内部类,如下的使用方式较少
public static void method1() {
class InnerClass{
public void show() {
System.out.println("你好啊我是内部类的傻B方法");
}
}
InnerClass inner = new InnerClass();
inner.show();
}
}
二 : 内部类的使用
常常使用一个方法,使其返回值为某个类或接口的对象,
而这个类或接口在方法内部创建
接口
interface CompareObject{
int compareTo(Object o);
}
使用一
class OuterClass{
public Comparable getcomparable() {
//1创建一个实现 Comparable 接口的类
//2.返回一个实现类的对象
class Mycomparable implements Comparable{
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
}
return new Mycomparable();
}
}
使用二 返回 接口的匿名内部类对象
class OuterClass{
public Comparable getComparable1() {
//返回一个实现 Comparable 接口的匿名内部类对象
return new Comparable() {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
}
}