Java 内部类

Java内部类,定义在内部的类称为内部类。

分为:静态内部类,成员内部类,局部内部类,匿名内部类

一、静态内部类

public class StaticInnerClassTest {

    public static void main(String[] args) {
        StaticInner.Inner inner = new StaticInner.Inner();
        inner.test();
    }
}


 class StaticInner{

    private static int a = 4;
    
    
    public static class Inner {
        
        public void test(){
            System.out.println(a);
        } 
    }
    
}

只能访问外部类的静态成员变量与静态方法,生成静态内部类对象的方式为

OuterClass.Inner inner = new OuterClass.Inner()

二、成员内部类

class MemberInner{
	
	private int a = 4;
	
	public class Inner2{
		
		private int a = 5;
		
		public void doSomething(){
			System.out.println("hello world");
		}
		
		public void printA(){
			//访问外部类 a = 4
			System.out.println(MemberInner.this.a);
		}
	}
}
public class MemberInnerClassTest {

	public static void main(String[] args) {
		MemberInner.Inner2 inner2 = new MemberInner().new Inner2();
		inner2.doSomething();
	}
}

  

  

三、局部内部类

定义在方法中,只能访问方法中声明的final类型变量

class LocalInner{
	
	public void doSomeThing() {
		
		class Inner3{
			
			public void test(){
				System.out.println("hello world");
			}
		}
		
		//方法中定义的类,在该方法中使用
		new Inner3().test();
	}
	
}
public class LocalInnerClassTest {
	public static void main(String[] args) {
		LocalInner inner = new LocalInner();
		inner.doSomeThing();
	}
}

  

四、匿名内部类

匿名内部类会隐试的继承一个父类或者实现一个接口

1、匿名内部类重写toLocaleString方法

public class AnnoymousInnserClassTest {

	
	public String get(Date date){
		return date.toLocaleString();
	}
	
	public static void main(String[] args) {
		AnnoymousInnserClassTest test = new AnnoymousInnserClassTest();
		//String str = test.get(new Date());

		String str = test.get(new Date(){	
			public String toLocaleString() {
				return "Hello world";
			}
		});
		System.out.println(str);
		
	}
	
}

  打印结果:

2、使用Swing的匿名内部类

内部类Code

public class SwingTest {
	public static void main(String[] args) {
		JFrame frame = new JFrame("JFRame");
		JButton button = new JButton("click");
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("hello world");
				
			}
		});
		frame.setSize(200, 200);
		frame.getContentPane().add(button);
		frame.setVisible(true);
	}
}

  

原文地址:https://www.cnblogs.com/linlf03/p/10853667.html