内部类
内部类Cat实现了Animal接口,在调用animalShout()方法时,将Cat类的实例对象作为参数传入到方法中,输出结果。
//定义Animal接口
interface Animal {
void shout(); //定义抽象方法shout()
}
//定义测试类
public class InnerClass {
public static void main(String[] args) {
//定义一个内部类Cat实现Animal接口
class Cat implements Animal{
//实现shout方法
public void shout(){
System.out.println("喵喵...");
}
}
animalShout(new Cat()); //调用animalShout()方法并传入Cat对象
}
//定义静态方法animalShout()
public static void animalShout(Animal an){
an.shout(); //调用传入对象an的shout()方法
}
}
运行结果:喵喵...
匿名内部类
-
格式
new 父类(参数列表) 或 父接口(){
//匿名内部类实现部分
}
匿名内部类在实现父类方法或者接口的时候直接创建了对象。
匿名内部类一般当作参数直接写在其他方法的参数里面,如下例子就是直接写在了方法的参数里面。
//定义Animal接口
interface Animal {
void shout(); //定义抽象方法shout()
}
//定义测试类
public class AnonymousInnerClass {
public static void main(String[] args) {
//定义匿名内部类作为参数传递给animalShout()方法
animalShout(new Animal() {
//实现shout()方法
public void shout(){
System.out.println("喵喵...");
}
});
}
//定义静态方法animalShout()
public static void animalShout(Animal an){
an.shout(); //调用传入对象an的shout()方法
}
}
上述匿名内部类的使用可以分解为如下两步
-
在调用animalShout()方法时,在方法的参数位置写上new Animal(){},相当于创建了一个实例对象,这个实例对象是Animal的子类实例。并将这个对象作为参数传递给animalShout()方法。此时这个子类是匿名的。
animalShout(new Animal( ){ });
-
在大括号中编写匿名子类的实现代码如下:
animalShout(new Animal() { //实现shout()方法 public void shout(){ System.out.println("喵喵..."); } });
匿名内部类是接口的简便写法,但是不一定非要使用这种方法。