
正文
java匿名类用代码举例 java匿名类的使用
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java 匿名类
abstract class Animal {
public abstract void cry();
}
class TestCry {
public void testCry(Animal animal) {
animal.cry();
}
}
public class Example{
public static void main(String[] args) {
TestCry cry = new TestCry () ;
cry.testCry(new Animal (){
public void cry() {
System.out.println("Cat is crying!");
}
});
cry.testCry(new Animal (){
public void cry() {
System.out.println("Dog is crying!");
}
});
// ... 省略其他
}
}
先看段伪代码
abstract class Father(){
....
}
public class Test{
Father f1 = new Father(){ .... } //这里就是有个匿名内部类
}
一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。
但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。
因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。
上面的伪代码就是表示new 的是Father的实现类,这个实现类是个匿名内部类。
其实拆分上面的匿名内部类可为
class SonOne extends Father{
... //这里的代码和上面匿名内部类,大括号中的代码是一样的
}
public class Test{
Father f1 = new SonOne() ;
}
相关问答
Q1: java 匿名类怎么写,有什么作用,能举个简单的例子吗?
private JButton button = new JButton("OK");
button.addActionListener(new ActionListener(){
//...
});
这里面的ActionListener就是一个匿名类java匿名类用代码举例,java匿名类用代码举例他的作用跟类的成员方法差不多java匿名类用代码举例,可以直接当参数传递java匿名类用代码举例,如TimerTask类
Q2: java匿名内部类,我理解不了,能给我举个例子吗?
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Demo04 extends JFrame{
private static final long serialVersionUID = 1L;
JTextArea ta = new JTextArea(10,30);
JButton bt = new JButton("显示hello world");
public static void main(String[] args) {
new Demo04().start();
}
public Demo04(){
super();
}
public void start(){
this.setSize(400, 400);
this.add(ta);
this.setLayout(new FlowLayout());
this.add(bt);
bt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
per();
}
});
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void per() {
int t = Integer.parseInt(ta.getText());
ta.setText("");
for(int i = 0;it;i++){
ta.append("hello world\n");
}
}
}
给bt 添加监听器就是一个匿名内部类。因为没有名字,
在编译路径下是 —— 外部类名$数字 ——来表示的
Q3: java 匿名内部类 如何实现? 举例说明
内部类,就是建立一个内部的类,但没有给你命名,也就是没有引用实例的变量。
public void start() {
this.setBounds(50, 50, GAME_WIDTH, GAME_HEIGHT);
this.setBackground(Color.green);
this.setVisible(true);
/*
下面这个就是内部类了
*/
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.addKeyListener(new TankKeyEvent());
this.setResizable(false);
new Thread(new TankThread()).start();
}
new 是建立一个 WindowAdapter对象 ,后面一个 {} 表示这个括号中的操作作用于这个默认的对名象,而上面的Java程序中后面是一个函数体。这
个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。打开 WindowAdapter
的代码可以发现。它是一个抽象类。它是对 WindowListener 接口的一个实现。Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个类。
Q4: JAVA匿名类是什么,怎么用??
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。
内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。
匿名类与其他类的不同就在于匿名,也就是没有名称。
Java中允许创建子类对象时,除了使用父类的构造方法外,还可以用类体。 匿名类就是一个没有类申明的类体,因为没有名称,所有匿名类不可以申明对象,但却可以创建对象。 例如:
A是一个子类,那么下面的代码就是A的一个子类(匿名类)创建对象。
new A(){
匿名类的类体
};
由于匿名类是一个子类,所以和有一般子类的特征。可以继承父类的方法,同样也可以重写父类的方法。值得提醒的是,在使用匿名类时,一定是在某个类中直接用匿名类创建对象,因此匿名类必定是内部类,所以和其他匿名类一样可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以什么。
static成员变量和static方法。
尽管匿名类没有申明的步骤,但可以在创建匿名对象时返回一个引用赋值给匹配参数。 匿名类的常用方式是向方法的参数传值。
具体方法如下:
abstract class Speak{
public abstract void speakHello();
}
class Student{
void f(Speak sp){
sp.speakHello();
}
}
public class AnonymousClassDemo {
public static void main(String[] args) {
Speak speak = new Speak(){
public void speakHello(){
System.out.println("大家好,祝工作愉快!");
}
};
speak.speakHello();
Student st = new Student();
st.f(new Speak(){
public void speakHello(){
System.out.println("I am a student, how are you");
}
});
}
}
上面代码的抽象类改成接口同样适用。
java匿名类用代码举例的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java匿名类的使用、java匿名类用代码举例的信息别忘了在本站进行查找喔。







