Java中的内部类


内部类是一种类的结构扩充,在一个类的内部除了属性和方法,还可以存在其他的类,就是在一个类的内部继续定义其他内部类结构,并且内部类也可以定义在方法和代码块中。


1.内部类的基本形式
class Outer{
	private String ronin="Hello World!";
	class Inner{
		public void print(){
			System.out.println(ronin);
		}
	}
	public void fun(){
		new Inner().print();   //实例化内部类对象,并且调用print()方法
	}
}
public class TestDemo{
	public static void main(String args[]){
		Outer out=new Outer();  //实例化外部类对象
		out.fun();              //调用外部类方法
	}
}
程序执行结果:Hello World!

注意:Inner为定义的内部类,这样做虽然破坏了类的结构性,但是它可以轻松的访问外部类中的私有属性,在开发过程中不建议使用内部类。

2.关于内部类的实例化

内部类实例化语法:外部类.内部类 对象 = new 外部类().new 内部类();
程序示例:实例化内部类对象

class Outer{
	private String ronin="Hello World!";
	class Inner{
		public void print(){
			System.out.println(Outer.this.ronin); //外部类.this=外部类当前对象
		}
	}
}
public class TestDemo{
	public static void main(String args[]){
		Outer.Inner in=new Outer().new Inner();
		in.print();
	}
}

定义私有的内部类,即Inner类只能在Outer类中使用,同时无法在外部实例化Inner类对象,这个内部类只为Outer这一个类服务。

class Outer{
	private String ronin="Hello World!";
	private class Inner{
		public void print(){
			System.out.println(Outer.this.ronin); 
		}
	}
}
3.使用static定义内部类

如果一个内部类使用static来定义,那么这个内部类就相当于一个“外部类”,并且只能访问外部类中定义的static操作。 static内部类的实例化语法:外部类.内部类 对象 = new 外部类.内部类();
程序:

class Outer{
	private String ronin="Hello World!";
	static class Inner{
		public void print(){
			System.out.println(Outer.ronin); 
		}
	}
}
public class TestDemo{
	public static void main(String args[]){
		Outer.Inner in=new Outer.Inner();
		in.print();
	}
}

注意:使用static定义的内部类,其完整的名称就是 “外部类.内部类” ,在实例化对象时不需要先实例化外部类。

4.在方法中定义内部类

理论上内部类可以在类的任意位置定义,但是在开发过程中,在普通方法中定义内部类的情况最多。
程序:内部类访问方法中定义的参数

class Outer{
	private String ronin="Hello World!";
	public void fun(int num){
		double score=99.9;
		class Inner{
			public void print(){
				System.out.println("属性:"+Outer.this.ronin);
				System.out.println("方法变量:"+score);
				System.out.println("方法参数:"+num);
			}
			new Inner().print();
		}
	}
}
public class TestDemo{
	public static void main(String args[]){
		new Outer().fun(100); 
	}
}
程序执行结果:  属性:Hello World!
              方法变量:99.9
              方法参数:100

注意:在JDK 1.8之前的版本中,方法中定义的内部类如果想要访问方法的参数或方法中定义的变量,要在定义变量和参数前加上 “final” 标记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值