匿名类
匿名类会使你的代码更加简单,它与一般的类基本一样不同的是它没有类名,不过匿名类适合于使用一次的
一般类。以下内容包括
- 匿名类的声明
- 匿名类的语法
声明匿名类
普通的类是声明,而匿名类是表示出来。它的意思是你定义这个类是表使一部分。
package java官方文档匿名类;
public class App {
interface HelloWord
{
public void great();
public void getSomeone(String someone);
}
public void sayHello()
{
class EnglishGreeting implements HelloWord
{
//This is a local class.
private String name="world";
public void great()
{
getSomeone(name);
}
public void getSomeone(String someone)
{
name=someone;
System.out.println("hello"+name);
}
}
HelloWord englishgreat=new EnglishGreeting();
HelloWord frenchgreat=new HelloWord() {
//This is a anonymous class.
@Override
public void great() {
// TODO Auto-generated method stub
getSomeone(" word");
}
@Override
public void getSomeone(String someone) {
// TODO Auto-generated method stub
System.out.println("hello"+someone);
}
};
englishgreat.getSomeone("hello");
frenchgreat.getSomeone("hello");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
App myApp=new App();
myApp.sayHello();
}
}
匿名类的语法
之前提到过,匿名类不是定义而是表达,这与普通类的构造函数基本一样,不过这里我们
不是构造变量,而是构造类。
HelloWord frenchgreat=new HelloWord() {
//This is a anonymous class.
@Override
public void great() {
// TODO Auto-generated method stub
getSomeone(" word");
}
@Override
public void getSomeone(String someone) {
// TODO Auto-generated method stub
System.out.println("hello"+someone);
}
};
匿名类的实现包含以下这些内容
- 使用new操作
- 它的名字是接口去实现或者一个类去实现。
- 在代码的内部是实现的主体
- 圆括号里面应该包含构造函数,本例使用接口,所以使用空括号
访问定义域内的局部变量,定义和使用匿名成员
- 匿名类可以访问外部成员
- 匿名类不能使用不是final声明的变量,或者在匿名类内部没有final行为的变量
- 匿名类内部定义的类型会屏蔽外部同名的变量。
- 匿名类可以使用static变量,只有是final的
- 匿名类内部不能有static变量,接口,定义的方法
- 你们类中可以定义方法,变量,类的实例,或者定义类
匿名类里面定义类的实例代码
Hello hello=new Hello()
{
private int age=10;//变量
class Person{
String name;
}//定义类
public void get()//定义方法
{
}
public void getSomeone()
{
System.out.println("hello");
}
};