Java--内部类

仅作为了解。。。
内部类就是一个类在另一个类的里面。

内部类的分类:
  • 成员内部类
  • 局部内部类
  • 静态内部类
  • 匿名内部类
成员内部类特点
  • 成员内部类在成员位置

  • 创建:1.在外部类里面:外部类名 name=new 外部类名();
    2.在外部类外面:外部类名.内部类名 name=new 外部类名().new 内部类名();

  • 调用:外部类.内部类.属性(方法)();

局部内部类特点
  • 局部内部类不能用public或private所修饰
  • 局部内部类作用域被限定在声明该类的方法块中
  • 局部内部类可以对外界完全隐藏起来,除了所在的方法之外,对其他方法而言是不透明的
  • 局部内部类不仅可以访问包含它的外部类的成员,还可以访问局部变量,但这些局部变量必须被final所修饰。
静态内部类特点
  • 静态内部类不用实例化
  • 静态内部类可以有静态成员和非静态成员
  • 静态内部类只能调用外部的静态成员
  • 外部类不可以定义为静态
  • 创建:1.在非外部类中:外部类名.内部类名 name=new 外部类.内部类();
    2.在外部类中:内部类名 name=new 内部类名();
  • 外部类可以直接通过“外部类.内部类.属性(方法)”的方式直接调用。
匿名内部类
  • 类似于匿名对象但是将类写在匿名对象后面
  • 匿名内部类常用格式总结
    new 父类或者接口(){
    重写父类或者接口里的函数
    一般就一两个
    };

举个栗子

class outer{
	void show()
	{
		System.out.println("这是外部类。。。");
	}
	//内部类在局部位置的测试
	void method()
	{
		final int x=2;    //当内部类在局部位置访问局部变量时 前要加final关键字
		//内部类在局部位置
		class ininer{
			void input()
			{
			System.out.println("这是一个局部内部类。。。"+x);     
			}
		}
		ininer in=new ininer();
		in.input();  
   }
	private int num=1;
	//内部类在成员位置
	class iner{
		void put()
		{
			System.out.println("这是一个内部类。。。"+num);     //可以访问外部类的成员
		}
	}
}

class InclassDemo{
public static void main(String[] args)
	{
		//在成员位置的内部类
		outer.iner a=new outer().new iner();     //ok,长得比较奇怪
		a.put();
		//在局部位置的内部类
		outer out=new outer();
		out.method();
	}
}
匿名内部类
//格式一
package chapter09;
class USB{
	void open() {};
	void close() {};
}

class PC
{
	void use(){
	    
		new USB(){                 
		       
			public void open(){           
				System.out.println("插上鼠标");
			}
			public void close(){
				System.out.println("拔掉鼠标");
			}
		}.open();		
		
	}
 }

class InerDemo{
	public static void main(String[] args)
	{
		PC p=new PC();
		p.use();
	}
}

在这里插入图片描述

//格式二
package chapter09;
class USB{
	void open() {};
	void close() {};
}

class PC
{
	void use(){
	    
		USB u=new USB(){                 
		       
			public void open(){           
				System.out.println("插上鼠标");
			}
			public void close(){
				System.out.println("拔掉鼠标");
			}
		};		
		u.open();
		u.close();
	}
 }

class InerDemo{
	public static void main(String[] args)
	{
		PC p=new PC();
		p.use();
	}
}

在这里插入图片描述

匿名对象传值使用

class USB{
	void open() {};
	void close() {};
}
class PC
{
	void use(USB u)
	{
		u.open();
		u.close();
	}
}
class InerDemo{
	public static void main(String[] args)
	{
		PC p=new PC();
		p.use(new USB() {
			public void open(){           
				System.out.println("插上鼠标");
			}
			public void close(){
				System.out.println("拔掉鼠标");
			}
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值