zoukankan      html  css  js  c++  java
  • 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);
    	}
    }
    

      

  • 相关阅读:
    题解:CF1494 F. Delete The Edges
    「CEOI2011」选做
    题解:「CEOI2017」Chase
    学习笔记:《具体数学》问题整理
    题解:「COCI2019」 Transport
    【做题记录】位运算
    线性DP
    虚树 virtual-tree
    三元环计数
    长链剖分
  • 原文地址:https://www.cnblogs.com/linlf03/p/10853667.html
Copyright © 2011-2022 走看看