匿名类

匿名类会使你的代码更加简单,它与一般的类基本一样不同的是它没有类名,不过匿名类适合于使用一次的

一般类。以下内容包括

  • 匿名类的声明
  • 匿名类的语法

声明匿名类

普通的类是声明,而匿名类是表示出来。它的意思是你定义这个类是表使一部分。

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");
			}
			
				};