内部类

内部类: 顾名思义就是把类放在某个范围的内部

  • 类可以放在包
  • 类可以放在文件中,.java文件
  • 类可以放在类中(类里套类) 内部类
  • 类可以放在方法中(方法类套类) 内部类

1.类中放置内部类

要使用内部类,就需要在外部类中实例化内部类的对象
然后用对象打点调用内部类中的方法

(可以在外部类中,调用内部类的私有方法和私有属性)
通过内部类里的方法来操作内部类的数据,
在内部类中可以直接使用外部类中的所有的方法和属性

要使用内部类,可以在外部类的外面实例化内部类的对象
然后通过对象打点调用内部类的非私有的方法(同一个包内)

2.方法类套类

要使用方法中的内部类,就必须在方法中,内部类定义的下面
实例化内部类的对象,然后通过内部类对象打点,调用内部类
中的属性和方法(包含私有的)
内部类的作用域仅限于当前方法
从内部类定义开始到方法结束,内部类的作用域就消失

在内部类中可以直接使用外部类中的属性和当前方法中的局部变量

在外部类的外部不能使用外部类的方法中的内部类


例:

public class OuterClass {
	private int outer_1=100;
	public int outer_2=10;
	InnerClass ic1=new InnerClass();//作用域整个OuterClass范围
	public void outer_method1(){
		System.out.println("outer_method1()");
		System.out.println(outer_1+"   "+outer_2);
		InnerClass ic2=new InnerClass();//作用域,从本行开始到第一个右大括号结束
		System.out.println("在外部类中用内部类的对象调用内部类中的所有(公,私)="+ic1.inner_1);
		ic1.inner_method1();
		ic1.inner_method2();
		
		System.out.println("在外部类中用内部类的对象调用内部类中的所有(公,私)="+ic2.inner_1);
		ic2.inner_method1();
		ic2.inner_method2();
	}
	//有名内部类,类里套类
	class InnerClass{
		private int inner_1=123;
		public int inner_2=321;
		public void inner_method1(){
			System.out.println("Inner_method1()  内部类可以直接访问外部类中的属性和方法");
			System.out.println("InnerClass中的属性 "+inner_1+"  "+inner_2);
			System.out.println("outerClass中的属性 "+outer_1+"  "+outer_2);
		}
		private void inner_method2(){
			System.out.println("Inner_method2()  内部类可以直接访问外部类中的属性和方法");
			System.out.println("InnerClass中的属性 "+inner_1+"  "+inner_2);
			System.out.println("outerClass中的属性 "+outer_1+"  "+outer_2);
		}
	}
}

测试类
注意特殊用法,在外部类的外部实例化内部类的对象
OuterClass.InnerClass ic = oc.new InnerClass();
OuterClass.InnerClass ic1 =new OuterClass().new InnerClass();

public class Test {

	public static void main(String[] args) {

		//普通用法
		OuterClass oc=new  OuterClass();
		oc.outer_method1();
		//特殊用法,在外部类的外部实例化内部类的对象
		OuterClass.InnerClass ic=oc.new InnerClass();
		OuterClass.InnerClass ic1=new OuterClass().new InnerClass();
		
		/*No enclosing instance of type 
		OuterClass is accessible. Must qualify the
		allocation with an enclosing instance of 
		type OuterClass (e.g. x.new A() 
		where x is an instance of OuterClass).*/
		
	}

}

运行结果:

outer_method1()
100 10
在外部类中用内部类的对象调用内部类中的所有(公,私)=123
Inner_method1() 内部类可以直接访问外部类中的属性和方法
InnerClass中的属性 123 321
outerClass中的属性 100 10
Inner_method2() 内部类可以直接访问外部类中的属性和方法
InnerClass中的属性 123 321
outerClass中的属性 100 10
在外部类中用内部类的对象调用内部类中的所有(公,私)=123
Inner_method1() 内部类可以直接访问外部类中的属性和方法
InnerClass中的属性 123 321
outerClass中的属性 100 10
Inner_method2() 内部类可以直接访问外部类中的属性和方法
InnerClass中的属性 123 321
outerClass中的属性 100 10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值