• 黑马程序员--内部类


     

    内部类即在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,且依附于外部类而存在。

    内部类的访问规则:

    (1)内部类可以直接访问外部类中的成员,包括私有。

    (2)外部类需要访问内部类时,必须建立内部类对象。访问格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象

    内部类之所以可以直接访问外部类中的成员,是因为内部类中持有了外部类的引用。访问格式:外部类名.this。

    例:

    class Outer//外部类
    {
    	int num=3;
    	class Inner//内部类
    	{
    		void show()
    		{
    			System.out.println("Inner num="+num);
    		}
    	}
    	void function()
    	{
    		Inner in =new Inner();
    		in.show();
    	}
    }
    
    class InnerClassDemo
    {
    	public static void main(String[] args)
    	{
    		//Outer.out=new Outer();//内部类访问外部类中的成员
    		//out.function();
    		Outer.Inner in =new Outer().new Inner();//外部类访问内部类成员
    		in.show();
    	}
    }



            当内部类被static修饰后,内部类只能直接访问外部类中的static成员,出现了访问局限。当内部类中定义了静态成员,该内部类也必须是静态的。当外部类中的静态方法访问内部类时,内部类也必须是静态的。当内部类定义在局部时,它不可以被成员修饰符修饰,但是内部类依然可以访问外部类类中的成员,因为内部类仍然持有外部类的引用,但是不可以访问它所在的局部变量,只能访问被final修饰的局部变量。

            内部类分为成员内部类、静态嵌套类、方法内部类和匿名内部类。接下来我只介绍匿名内部类。

            匿名内部类,顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。匿名内部类其实就是内部类的简写格式。对于匿名内部类,我们要注意以下几点:

    (1)定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

    (2)匿名内部类的定义格式:new  父类或者接口(){定义子类的内容}

    (3)匿名内部类中定义的方法最好不要超过3个。

    (4)匿名内部类不能定义任何静态成员、方法和类。

    (5)匿名内部类不能有构造方法。

    例:

    interface Inter
    {
    	void method();
    	
    }
    
    class Test
    {
    	static Inter function()
    	{
    		return new Inter()//匿名内部类
    		{
    			public void method()
    			{
    				System.out.println("method run!");
    			}
    		};
    	}
    }
    
    class InnerClassTest
    {
    	public static void main(String[] args)
    	{
    		//Test.function():Test类中有一个静态的方法function。
    		//.method():function这个方法运算后的结果是一个对象。
    		Test.function().method();
    	}
    }


     


     

  • 相关阅读:
    线性时间选择
    ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
    ef
    c# 采集 获取网页数据内容 一会超时的问题
    entity4.1
    逐渐约束
    entity4.1
    ObjectContext.Refresh
    使用内存表
    MVCdropdownlist
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207041.html
Copyright © 2020-2023  润新知