Java内部类

Posted 清风徐来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
	}

}

  

 



以上是关于Java内部类的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

# Java 常用代码片段

elasticsearch代码片段,及工具类SearchEsUtil.java

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

为啥片段类应该是公开的?

ForegroundService没有从片段开始?