在学习匿名内部类之前,先学习一个小例子。
范例: 观察程序问题
interface IMessage {
public void print();
}
class MessageImpl implements IMessage {
public void print() {
System.out.println("Hello");
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage msg = new MessageImpl();
fun(msg);
}
public static void fun(IMessage msg) {
msg.print();
}
}
如果现在 MessageImpl 子类只使用一次。还有必要将其单独定义为单独一个类吗?很明显这是浪费了。那么此时就可以利用匿名内部类的概念来解决。如下使用了匿名内部类:
interface IMessage {
public void print();
}
public class TestDemo {
public static void main(String[] args) {
IMessage msg = new MessageImpl() {
public void print() {
System.out.println("Hello");
}
};
}
public static void fun(IMessage msg) {
msg.print();
}
}
通过这样的程序可以得出一个结论:基本上弄匿名内部类都应该是在接口和抽象类的形式上完成。
范例: 在抽象类中使用匿名内部类
abstract class Message {
public void print() {
System.out.println(this.getInfo());
}
public abstract String getInfo();
}
public class TestDemo {
public static void main(String[] args) {
fun(new Message(){
public String getInfo() {
return "blog.isohard.cn";
}
});
}
public static void fun(Message msg) {
msg.print();
}
}
强调了:一个普通类尽量不要再去有子类继承,能够继承的只是抽象类或接口,虽然可以在普通类上继续使用匿名内部类的形式来定义子类,但是从正常的逻辑上不建议这样做。
范例: 在普通类中使用匿名内部类(不推荐)
class Message {
public void print() {
System.out.println("Hello");
}
}
public class TestDemo {
public static void main(String[] args) {
fun(new Message(){
public void print() {
System.out.println("blog.isohard.cn");
}
});
}
public static void fun(Message msg) {
msg.print();
}
}
849

被折叠的 条评论
为什么被折叠?



