/**
* 匿名内部类:
* 1、匿名内部类就是内部类的简写格式
* 2、定义匿名内部类的前提:
* 内部类必须是继承一个类或是实现接口
*
*/
abstract class AbsDemo{
abstract void show();
}
class Outer{
int x = 3;
/*class Inner extends AbsDemo{
@Override
void show() {
System.out.println("inner show: "+x);
}
}*/
public void function(){
AbsDemo ad = new AbsDemo(){
void show() {
System.out.println("anonymous inner class show():"+x);
}
void abc(){
System.out.println("abc");
}
};
ad.show();
//ad.abc();调用不了,所以匿名内部类一部不新定义方法
}
}
public class AnonymousInnerClass {
public static void main(String[] args) {
new Outer().function();
}
}
* 人和动物都有心脏,但它们的结构和属性可能有些不一样。这样,就可以用内部类
* 的方式实现具体的心脏的功能。
* */
//-----------------------------------------------------------------------------------------------------------------------------------小练习一枚
interface Inter{
void method();
}
class Test{
static class Inner implements Inter{
public void method() {
System.out.println("Inner class: Inter method()");
}
}
static Inter function(){
/**
* return new Inner();
*/
return new Inter(){
public void method() {
System.out.println("Anonymous class in function().method()");
}
};
}
}
public class InnerClassTest {
public static void main(String[] args) {
Test.function().method();
//匿名内部类直接作为函数参数
show(new Inter(){
@Override
public void method(){
System.out.println("Anonymous class in arguments");
}
});
}
public static void show(Inter in){
in.method();
}
}
//------------------------------------------------------------------------------------------------------------------------------------AWT中匿名内部类的应用
import java.awt.*;
import java.awt.event.*;
public class AwtDemo {
public static void main(String args[]){
Frame f = new Frame("my.awt");
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout());
Button b = new Button("我是一个按钮");
f.add(b);
//内部类
class MyWindowListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.out.println("我关了!"+e.toString());
System.exit(0);
}
public void windowActivated(WindowEvent e){
System.out.println("我活了!");
}
public void windowOpened(WindowEvent e){
System.out.println("我打开了!");
}
}
f.addWindowListener(new MyWindowListener());
//匿名内部类
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("我关了!"+e.toString());
System.exit(0);
}
public void windowActivated(WindowEvent e){
System.out.println("我活了!");
}
public void windowOpened(WindowEvent e){
System.out.println("我打开了!");
}
});
f.setVisible(true);
}
}