zoukankan      html  css  js  c++  java
  • Java内部类

    什么是内部类?

    放在一个类的内部的类,我们称之为内部类

    为什么使用内部类?

    1.内部类提供了更好的封装,只有外部类才可以直接访问内部类。

    2.内部类可以继承和实现接口,不收外部类的影响。

    3.内部类的方法和属性即使是外部类也不能直接访问,而内部类却可以随时访问外部类的属性和方法。

    4.有利于回调函数的编写

    Java内部类共分为4种

    成员内部类

    方法(局部)内部类

    匿名内部类

    静态内部类

    使用方法

    成员内部类

    /**
     * 成员内部类
     * 1.不能有static修饰的变量和方法,如果有必须加上final修饰
     * 2.成员内部类是依附外部类的,只有创建外部类才能创建内部类
     * 3.外部类不能直接访问内部类的属性和方法,需要一个内部类的一个实例来访问
     * 
     * @author Administrator
     *
     */
    public class Outer {
    
    	private int num=5;
    	
    	class Inner{
    		
    		private int num=10;
    		public void print(){
    			//调用内部类变量
    			System.out.println("内部类方法"+num);
    			//调用外部类变量
    			System.out.println("外部类方法"+Outer.this.num);
    		}
    		
    	}
    	
    	public void print(){
    		System.out.println("外部类方法");
    	}
    	
    	public static void main(String[] args) {
              //方式一 //创建外部类对象 Outer out=new Outer(); //创建内部类对象 Inner inner = out.new Inner(); inner.print(); //外部类方法 out.print();
    //方式二 //创建内部类对象 Outer.Inner in=new Outer().new Inner(); //调用内部类方法 in.print(); } }

      

    方法(局部)内部类

    /**
     * 方法内部类
     * 1.不可以有静态变量
     * 2.只能调用方法内的常量
     * 3.不能有访问修饰符
     * @author Administrator
     *
     */
    public class Outer1 {
    	
    	public void print(){
    		final int nums=5;
    		class Inner{
    			private int num=10;
    			
    			public void print(){
    				
    				System.out.println("内部类方法变量"+this.num);
    				//调用方法内变量
    				System.out.println("外部类方法变量"+nums);
    			}
    			
    		}
    		//调用内部类方法
    		new Inner().print();
    	}
    	
    	public static void main(String[] args) {
    		new Outer1().print();
    	}
    	
    }
    

      

    匿名内部类

    /**
     * 匿名内部类
     * 1.必须继承一个抽象类或接口
     * 2.不能有static修饰的成员变量和方法,只能用final修饰
     * 3.所在方法内变量都必须使用final修饰
     * 4.没有访问修饰符
     * 5.没有构造,因为他没有类名
     * @author Administrator
     *
     */
    public class Outer2 {
    	private int num=5;
    	
    	public void print(){
    		final int num=10;
    		new Inner(){
    			public void print() {
    				System.out.println("外部类"+Outer2.this.num);
    				System.out.println("内部类"+num);
    			}
    		}.print();
    	}
    	
    	//定义一个接口
    	interface Inner{
    		void print();
    	}
    	
    	public static void main(String[] args) {
    		new Outer2().print();
    	}
    
    }
    

      

    静态内部类

    /**
     * 静态内部类
     * 1.不需要依赖外部类,可以直接创建
     * 2.静态内部类不能使用外部类的非静态成员和方法,而内部类可以
     * 3.不能使用   外部类名.this.属性名/方法
     * @author Administrator
     *
     */
    public class Outer3 {
    	
    	private static int nums=5;
    	
    	//创建静态内部类
    	static class Inner{
    		private int num=10;
    		public void print(){
    			System.out.println("内部类"+num);
    			System.out.println("外部类"+nums);
    		}
    		
    	}
    	
    	public static void main(String[] args) {
    		Inner in=new Inner();
    		in.print();
    	}
    
    }
    

      

  • 相关阅读:
    设计模式(一)工厂模式Factory(创建型)
    Caused by: org.springframework.beans.factory.BeanCreationException
    从Delphi 7升级到Delphi XE
    system strategies of Resources Deadlock
    Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc->wait
    Sqlserver2000联系Oracle11G数据库进行实时数据的同步
    火柴移动面试题
    Eclipse4.4设备egit插件提交本地项目代码到远程仓库
    V离MWare至Openstack至FDIO
    【BZOJ1791】【IOI2008】【基环树】island(status第一速度)
  • 原文地址:https://www.cnblogs.com/xuchangqi1/p/8620111.html
Copyright © 2011-2022 走看看