package mypack;public class A { public static void main(String[] args) { //匿名内部类的话直接写你要重写的方法就可以了,不用再写个类 B a = new B() { public void say(String name) { System.out.println("Hello," + name); } }; a.say("zeng"); } } class B{ public void say(String name) { System.out.println("您好," + name); }}
举个例子 看下面的代码:interface A { void display(); } class B { public void display(); } class C extends B //implements C 实现C的话,由于C继承了B的display(),又得实现A的display方法,所以.. { class D implements A //如此就会出错了 { public void display() {} } public A getD() { return new D(); } }
//匿名内部类的话直接写你要重写的方法就可以了,不用再写个类
B a = new B() {
public void say(String name) {
System.out.println("Hello," + name);
}
};
a.say("zeng");
}
}
class B{ public void say(String name) {
System.out.println("您好," + name);
}}
{
void display();
}
class B
{
public void display();
}
class C extends B //implements C 实现C的话,由于C继承了B的display(),又得实现A的display方法,所以..
{
class D implements A //如此就会出错了
{
public void display()
{}
}
public A getD()
{
return new D();
}
}
感觉就GUI有点用。其他地方都不是很必须。GUI有用也就是各个监听器的地方,用了内部类可以在只写一个类的时候使得逻辑清晰很多。
但内部类也不是什么太必须的东西。比方说GUI,可以写监听器类的时候,写一个以Frame为参数的构造函数来代替内部类。也就是怎么说呢,有些时候,只有在A类必须B类的private数据,同时A类存在的唯一目的只是为B服务时,内部类是才是不可替代的。
内部类更多的场合用在方法回调的时候。等你接触深了慢慢就回明白的,现在不好说。不知道你用过spring没有,你在实现public Object doInHibernate(Session session)这个方法的时候就回用到内部类。代码给你贴下public void addReport(final Integer planId, final Report report) {
ht.execute(new HibernateCallback() { public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Plan plan = (Plan) session.load(Plan.class, planId);
plan.getReports().add(report);
session.update(plan);
return null;
} }); }
这就是一个内部类的典型实现
jButton.addActionListener(new ActionListener() {
public void actionPerformer(ActionEvent e) {
//...
}
});
2,可以解决JAVA不可以多重继续问题。
public void actionPerformed(ActionEvent arg0) {
Color c=JColorChooser.showDialog(FileChooserAndColorChooser.this,"请选择颜色",Color.BLACK);
label.setForeground(c);
FileChooserAndColorChooser.this.getContentPane().setBackground(c);
}