程序逸的Java小心得,不足挂齿相互学习(3)

一:内部类的讨论

(1)定义:所谓内部类就是在一个类内部进行其他类结构的嵌套操作。

(2)分类:成员内部类    局部内部类    匿名内部类   静态内部类.

       (1)成员内部类:

  1. class Super{
    	int a;
    	public Super() {}
    	public void name() {}
    	
    	class Sub{
    		int b;
    		public Sub() {}
    		public void name() {}
    	}
    	
    }

    定义在类中和成员变量方法一共个位置的类,里面也有自己的属性和构造方法,成员方法,类似Super是人,这个Sub是心脏.

  2. Super.Sub sub=new Super().new Sub();

    获取这个内部类对象的语法为这样,Super.Sub可以看作这个Super的一个类属性,然后需要先new一个Super的对象再可以new一共Sub对象.

  3. 成员内部类可以直接调用外部类的属性和方法(包括私有和静态,静态方法直接调用,不需要使用类名调用).但当调用同名方法时,需要创建外部类的对象调用,不然默认使用自己的方法.

    class Super{
    	int a;
    	public Super() {}
    	public void name() {System.out.println("Super name");}
    	public static void m1() {}
    	private void m2() {System.out.println("m2");}
    	class Sub{
    		int b=a;
    		public Sub() {}
    		public void name() {
    			new Super().name();
    			m1();
    			m2();
    		}
    	}
    	
    }

          

     (2)局部内部类:

  1. 定义:定义在方法中的类,可以看成临时变量.
  2. 代码:
    class Super{
    	int a;
    	public Super() {}
    	public void name() {System.out.println("Super name");}
    	public static void m1() {}
    	private void m2() {System.out.println("m2");}
    	
    	public void m3() {
    		class Sub{
    			int b=a;
    			public Sub() {}
    			public void m1() {
    				name();
    				m2();
    			}
                private void m2() {
    				
    			}
    			
    		}
    		Sub sub=new Sub();
    		sub.m1();
    		
    	}
    	
    }

     

  3. 同样,局部内部类可以定义属性方法,也可以直接调用外部类的属性方法,但只能在m3方法里面创建对象使用.

(3)匿名内部类

  1. 定义:不声明类的名称,直接使用new 类名(){方法体}
  2. 代码:
    HashSet<Integer> aHashSet=new HashSet<Integer>();
    		aHashSet.add(1);
    		aHashSet.add(2);
    		aHashSet.add(3);
    		aHashSet.forEach(new Consumer<Integer>() {
    
    			@Override
    			public void accept(Integer t) {
                    System.out.println(t);
    			}
    			
    		});

    这里使用HashSet通过forEach遍历时,使用了匿名内部类来实现.直接 new  Consumer<>(){   重写accept方法 } 这个匿名内部类有助于我们使用lambda表达式.

(4)静态内部类:

  1. 使用static来修饰的成员内部类
  2. class Super{
    	
    	static class Sub{
    		int a;
    		public static void name() {
    			
    		}
    		public void m1() {
    			
    		}
    		private void m2() {
    			
    		}
    	   
    	}
    	
    	public void m3() {
    		Sub.name();
    	}
    }

    定义的静态内部类还是可以定义成员和方法.调用其方法需要创建对象,但静态方法不用.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值