java代码:new 类名(){方法定义}应该如何理解?

下面这些代码是放在一个类的内部的。classtest{//class开始jPanel2=newJPanel(){protectedvoidpaintComponent(G... 下面这些代码是放在一个类的内部的。
class test { //class开始
jPanel2 = new JPanel (){
protected void paintComponent(Graphics g){
//代码
}
};
componet.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
// 这里写你想做的事情
}
});

问题:1、 new 类名(){方法定义};
这些应该如何理解?java类的定义我是明白的,但这种写法不明白。
2、监听mouse事件不应该实现MouseListener这个接口吗?上例(2)中怎么是MouseAdapter?
展开
 我来答
放飞新的人生
2015-11-26 · TA获得超过1707个赞
知道小有建树答主
回答量:405
采纳率:64%
帮助的人:217万
展开全部

new 类名(){方法定义} 这种写法是匿名内部类。


1、匿名内部类就是没有名字的内部类。这是Java为了方便程序员编写程序,而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼。

2、如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

3、用匿名内部类创建多线程有两种方式,和创建一个线程是一样的。

第①种继承Thread:

new Thread(){
    public void run(){
//do something
    };
}.start();



第②种实现 Runnable接口:

new Thread(new Runnable() {
    public void run() {
 //do something
    };
}) { }.start();
喜欢扮酷
2012-03-26 · 超过12用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:37.4万
展开全部
1、 new 类名(){方法定义};
定义完类名以后,就在类里面定义想要的方法。
2、监听mouse事件不应该实现MouseListener这个接口吗?上例(2)中怎么是MouseAdapter?
MouseAdapter 实现了MouseListener接口,如果直接实现MouseListener,必须实现接口的5个方法(mouseClicked,mouseEntered, mouseExited,mousePressed,mouseReleased)。但是这里只想要实现其中一个方法mouseReleased,所以可以使用实现了MouseListener接口的类MouseAdapter ,这样就可以只写自己想要用的方法,别的方法都不用管。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chris_strive
2012-03-26 · TA获得超过350个赞
知道小有建树答主
回答量:658
采纳率:100%
帮助的人:412万
展开全部
new 类名(){方法定义};是对应一个内部类。
MouseAdapter事故addMouseListener的调用参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无野楼升域醉0t
2015-11-17 · TA获得超过8552个赞
知道小有建树答主
回答量:1498
采纳率:88%
帮助的人:502万
展开全部
匿名内部类:
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。
当程序中使用匿名内部类时,在定义匿名内部类的地方往往直接创建该类的一个对象。匿名内部类的声明格式如下:
new ParentName(){
...// 内部类的定义
}[1]
匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例 。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、静态方法。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
A、继承式的匿名内部类
public class Car {
public void drive(){
System.out.println("Driving a car!");
}
public static void main(String[] args) {
Car car = new Car(){
public void drive() {
System.out.println("Driving another car!");
}
};
car.drive();
}
}
结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。
B、接口式的匿名内部类。
interface Vehicle {
public void drive();
}
class Test{
public static void main(String[] args) {
Vehicle v = new Vehicle(){
public void drive(){
System.out.println("Driving a car!");
}
};
v.drive();
}
}
上面的代码很怪,好像是在实例化一个接口。事实并非如此,接口式的匿名内部类是实现了一个接口的匿名类。而且只能实现一个接口。
C、参数式的匿名内部类。
class Bar{
void doStuff(Foo f){
f.foo();
}
}
interface Foo{
void foo();
}
class Test{
static void go(){
Bar b = new Bar();
b.doStuff(new Foo(){
public void foo(){
System.out.println("foofy");
}
});
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
璀璨圣剑圣龙神bj
2015-11-10 · TA获得超过146个赞
知道答主
回答量:113
采纳率:0%
帮助的人:80.5万
展开全部
这是内部类的写法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 5条折叠回答
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式