JavaSE——面向对象:内部类

内部类:定义在一个类内部的类,也称嵌套类。

213009_iHNe_3746823.png

010802_K6lE_3746823.png

 

010553_TX09_3746823.png

010726_j3rm_3746823.png

010858_tGKb_3746823.png

实例内部类:

180753_BgVz_3746823.png

实例内部类程序示例:

import mypro01.Outter.Inner;

class Outter{	//外部类
	int age=2;
	String sex="mail";
	public void doWorkOut(){
		System.out.println("我是外部类方法");
	}
	
	class Inner{	//内部类
		
		int age=12;
		String name;
		public void doWorkIn(){	//内部类方法
			doWorkOut(); 	//内部类可直接访问外部类方法
			
			//内部类访问外部类同名和不同名成员的方法
			System.out.println("内部类可直接访问外部类成员"+sex);
			System.out.println("内部类可访问外部类同名成员age :"+Outter.this.age); 	
			System.out.println("内部类的age和name: "+this.age+" "+this.name);
		}
	}
}
public class InnerClass {

	public static void main(String[] args) {

		System.out.println("**************外部类对象测试*****************");
		Outter out1= new Outter();
		System.out.println(out1.age);
		System.out.println(new Outter().age);
		
		System.out.println("**************内部类对象测试*****************");
		Inner in1= new Outter().new Inner();	//内部类定义方法
		Inner in2=out1.new Inner();				//内部类定义方法
		System.out.println(in1.name);
		System.out.println(in2.name);
		System.out.println(in2.age);
		
		System.out.println("**************内部类方法测试*****************");
		in1.doWorkIn();
		
	}

}

实例内部类程序示例运行结果:

**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
我是外部类方法
内部类可直接访问外部类成员mail
内部类可访问外部类同名成员age :2
内部类的age和name: 12 null

静态内部类

184833_o853_3746823.png

静态内部类程序示例:

import mypro01.Outter.Inner;

class Outter{	//外部类
	int age=2;
	static String sex="mail";
	public void doWorkOut(){
		System.out.println("我是外部类非静态方法");
	}
	
	static public void doWorkOut2(){
		
		System.out.println("我是外部类静态方法");
	}
	
	static class Inner{	//内部类
		
		int age=12;
		String name;
		public void doWorkIn(){	//内部类方法
			
			//静态内部类可直接访问外部类静态成员(字段和方法),但无法直接访问外部类非静态成员。
			System.out.println("静态内部类可直接访问外部类静态成员"+sex);
			doWorkOut2();
			
			//静态内部类访问外部类非静态成员(字段和方法)时,需通过外部类实例去访问。
			System.out.println("静态内部类访问外部类非静态成员age :"+new Outter().age); 	
			new Outter().doWorkOut(); 	
			
			System.out.println("内部类的age和name: "+this.age+" "+this.name);
		}
	}
}
public class InnerClass {

	public static void main(String[] args) {

		System.out.println("**************外部类对象测试*****************");
		Outter out1= new Outter();
		System.out.println(out1.age);
		System.out.println(new Outter().age);
		
		System.out.println("**************内部类对象测试*****************");
		Inner in1= new Inner();	//静态内部类在创建实例时,不必创建外部类实例
		Outter.Inner in2= new Outter.Inner();
		System.out.println(in1.name);
		System.out.println(in2.name);
		System.out.println(in2.age);
		
		System.out.println("**************内部类方法测试*****************");
		in1.doWorkIn();
		
	}

}

静态内部类程序运行示例:

**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
静态内部类可直接访问外部类静态成员mail
我是外部类静态方法
静态内部类访问外部类非静态成员age :2
我是外部类非静态方法
内部类的age和name: 12 null

局部内部类(注意区别局部内部类和成员内部类)

  • 局部内部类属于方法中的类。
  • 成员内部类是属于类中的类。

210835_cgKx_3746823.png

局部内部类程序示例:

局部内部类程序示例运行结果:

匿名内部类

212451_2g52_3746823.png

 

匿名内部类程序示例:

匿名内部类程序运行结果:

转载于:https://my.oschina.net/u/3746823/blog/1606430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值