一、有名内部类
1、分类:有名内部类分为静态的和非静态的
2、用法:
public class Test {
//有名非静态内部类
class T{
}
//有名静态内部类
static class TT{
}
public static void main(String [] args) {
//有名内部类非静态用法
Test test =new Test();
T t = test.new T();
//有名内部类静态用法
TT tt = new TT();//如果是在其他的类中使用该内部类,如是在Student类中使用TT,则格式为:TT tt = new Test.TT();此处的Test代表内部类TT外部的类
}
}
二、匿名内部类
1、定义:没有名字的类,不能单独存在
2、用法
①一定和创造对象一起存在
②创建方法:new 父类构造方法([参数列表]){}或new 接口名([参数列表]){}
③内部类一般是普通类和抽象类的子类或者是接口的实现类
public class Test {
public static void main(String [] args) {
//创建方法:new 父类构造方法([参数列表]){}或new 接口名([参数列表]){}
// 内部类一般是普通类和抽象类的子类或者是接口的实现类
//普通类的子类
new Object() {
};
//抽象类的子类
new AbstractList() {
@Override
public Object get(int index) {
return null;
}
...
};
//接口的实现类
new List() {
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
...
};
}
}
④匿名内部类可以新增自定义的属性和方法
⑤单独创建匿名内部类对象调用新增的属性和方法
public class Test {
public static void main(String [] args) {
//匿名内部类可以新增自定义的属性和方法
new Object() {
int age = 12;
public void eat() {
}
};
//这样创建匿名内部类对象不能调用新增的属性和方法,此处为上转型对象,不能调用新增的属性和方法
Object object = new Object() {
int age = 12;
public void eat() {
}
};
//单独创建匿名内部类对象调用新增的属性和方法
new Object() {
int age = 12;
public void eat() {
}
}.eat();
new Object() {
int age = 12;
public void eat() {
}
}.age=100;
System.out.println(new Object() {
int age = 12;
public void eat() {
}
}.age);
}
}