zoukankan      html  css  js  c++  java
  • 各种内部类

     

    内部类可以定义为: 接口 , 抽象类

    部类的命名不允许与外部类 重名,内部类可以继承同级的内部类,也可继承其它类(除内部类和外部类)

     

    成员内部类 (高度内聚(不为外面知道))

    package memberinner;
    
    //成员内部类
    public class Out{
    	public int i = 23;
    	
    	//一个内部类
    	//它可以访问所有方法,字段和外部类本身的引用
    	class Inner{
    		public void say(){
    			System.out.println("内部类可以引用所有字段的引用:"+i);
    			mehtod1();
    			System.out.println("本身内部类的自身引用:"+this);
    			System.out.println("外部类的引用:"+Out.this);
    		}
    	}
    	
    	//内部方法
    	public void mehtod1(){
    		System.out.println("这是一个方法");
    	}
    	
    	//调用
    	public static void main(String[] args) {
    		Out o = new Out();
    		//创建内部类的 实例
    		Inner i = o.new Inner();
    		i.say();
    	}
    
    	public String toString() {
    		return "Out [i=" + i + "]";
    	}
    }
    

    输出为:

    字段的引用:23
    这是一个方法
    本身内部类的引用:memberinner.Out$Inner@2a139a55
    外部类的引用:Out [i=23]

     

    方法内部类:(短暂性的 )

    方法内的内部类不能加范围限定(protected public private)
    方法内的内部类不能加static修饰符

    方法内的内部类只能在方法内构建其实例
    方法内的内部类如果访问方法局部变量,则此局部变量必须使用final修饰

    package memberinner;
    
    
    public class MothedInner {
    	
    	public void methodInn(){
    		//方法内部类   调用这个方法时才是有效(短暂性)
    		//类内部 自己调用
    		class inn {
    			public void method() {
    				System.out.println("这里是方法内部类");
    			}
    		}
    		inn i = new inn();
    		i.method();
    		
    	}
    	
    	public static void main(String[] args) {
    		new MothedInner().methodInn();
    	}
    }	
    

      

    运行的结果为:

      这里是方法内部类

    匿名内部类:

    匿名内部类也就是没有名字的内部类

    正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

    但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

    package memberinner;
    
    //定义一个接口
    interface Person{
    	public abstract void eat();
    }
    
    
    public class AnonyousClass {
    	
    	
    	//使用接口
    	public static void fun1(){
    		//通过匿名 内部类来实现 接口中方法
    			Person p = new Person(){
    				public void eat(){
    					System.out.println("人是可以吃饭的!   通过接口");
    				}
    			};
    			//调用  内部类的 方法;
    			p.eat();
    	}
    
    	//使用  Thread 线程 
    	public static void fun2(){
    		Thread t = new Thread(){
    			public void run() {
    				System.out.println("通过继承thread 实现里面的方法");
    			}
    		};
    		t.run();
    	}
    	
    	//使用  Runnable 线程 
    	public static void fun3(){
    		Runnable t = new Runnable(){
    			public void run() {
    				System.out.println("通过实现 Runnable 接口 实现里面方法");
    			}
    		};
    		t.run();
    	}
    	
    	public static void main(String[] args) {
    		fun1();
    		System.out.println("============");
    		fun2();
    		System.out.println("============");
    		fun3();
    	}
    
    }
    

    运行的结果为:

    人是可以吃饭的! 通过接口
    ============
    通过继承thread 实现里面的方法
    ============
    通过实现 Runnable 接口 实现里面方法

      

  • 相关阅读:
    axios的数据请求方式及跨域
    vuex 的介绍
    返回顶部的过渡式写法
    数据结构和算法——二叉树
    RecyclerView的刷新和加载更多
    希尔排序小结
    选择排序小结
    插入排序小结
    冒泡、快速排序小结
    数据结构和算法——递归算法
  • 原文地址:https://www.cnblogs.com/liugch/p/6069247.html
Copyright © 2011-2022 走看看