Java中的内部类

Java中的内部类

内部类的访问特点:

  • 内部类可以直接访问外部类中的成员。
  • 外部内要访问内部类,必须建立内部类的对象。

为什么内部类能直接访问外部类中的成员呢?
那是因为内部类持有外部类的引用。外部类名.this

一般用于类的设计。
分析事物时发现事物Outer描述中还有事物Inner,而且Inner事物还在访问被描述Outer事物的内容。
这时就将还有的事物Inner定义成内部类来描述。

如果内部类中定义了静态成员,该内部类也必须是静态的。

定义一个内部类如下:

class Outer
{
	private int num=3;
	class Inner//内部类
	{
		void show()
		{
			System.out.println("Inner run..."+num);
		}
		void function()
		{
			System.out.println("function run..."+num);
		}
	}
	public void method()
	{
		Inner in=new Inner();
		in.show();
	}
}

如何访问内部类Inner呢?通过定义一个Outer类对象访问Outer类的方法,在Outer类的方法中定义内部类Inner对象,在通过内部类对象Inner访问内部类的方法。

代码如下:

class InnerClassDemo 
{
	public static void main(String[] args) 
	{
		Outer o=new Outer();
		o.method();
		System.out.println("Hello World!");
	}
}

运行结果:

《Java中的内部类》

如何直接访问外部类Outer中内部类Inner的成员?访问方式如下:

class InnerClassDemo 
{
	public static void main(String[] args) 
	{
		//直接访问外部类中的内部类中的成员
		Outer.Inner in=new Outer().new Inner();
		in.show();
	}
}

运行结果:

《Java中的内部类》

如果一个内部类是静态的相当于一个外部类,访问方式如下:

class Outer
{
	private static int num=3;
	static class Inner//内部类
	{
		void show()
		{
			System.out.println("Inner run..."+num);
		}
		void function()
		{
			System.out.println("function run..."+num);
		}
	}
	public void method()
	{
		Inner in=new Inner();
		in.show();
	}
}
class InnerClassDemo 
{
	public static void main(String[] args) 
	{
		//如果内部类是静态的,相当于一个外部类。
		Outer.Inner in=new Outer.Inner();
		in.show();
	}
}

运行结果:

《Java中的内部类》

如果内部类中定义了静态成员,该内部类也必须是静态的。访问方式如下:

class Outer
{
	private static int num=3;
	static class Inner//内部类
	{
		void show()
		{
			System.out.println("Inner run..."+num);
		}
		static void function()
		{
			System.out.println("function run..."+num);
		}
	}
	public void method()
	{
		Inner in=new Inner();
		in.show();
	}
}

class InnerClassDemo 
{
	public static void main(String[] args) 
	{
		//如果内部类时静态的,成员是静态的。
		Outer.Inner.function();
	}
}

运行结果:

《Java中的内部类》

匿名内部类:就是内部类的简写格式。

必须有前提:
内部类必须继承或者实现一个外部类或者接口。

匿名内部类:其实就是一个匿名子类对象。

格式:new父类or接口(){子类内容}

示例代码如下:

abstract class Demo
{
	abstract void show();
}

class Outer
{
	int num=4;
	public void method()
	{
		new Demo()
		{
			void show()
			{
				System.out.println("show..."+num);
			}
		}.show();
	}
}

class InnerClassDemo3
{
	public static void main(String[] args) 
	{
		new Outer().method();
		System.out.println("Hello World!");
	}
}

内部类的匿名对象的应用场景:

  • 当函数参数是接口类型时,而接口中的方法不超过三个。
  • 可以使用匿名内部类作为时间参数进行传递。

当匿名内部类作为函数参数传递时,示例代码如下:

interface  Inter
{
	abstract public void show1();
	abstract public void show2();
}
class  InnerClassDemo4
{
	public static void main(String[] args) 
	{
		method(new Inter()
		{
			public void show1(){}
			public void show2(){}
		});
		System.out.println("Hello World!");
	}
	public method(Inter in)
	{
		in.show1;
		in.show2;
	}
}

 

    原文作者:田小呆呆呆
    原文地址: https://blog.csdn.net/tzm18942553857/article/details/82114098
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞