Java基础——内部类①

在一个类的内部定义的类称为内部类。内部类允许把一些逻辑相关的类组织在一起,并且控制内部类代码的可视性。对于初学者而言,内部类似乎有些多余,但是随着对内部类的逐步了解,就会发现它有独到的用途。学会使用内部类,是掌握Java高级变成的一部分,它能够让程序结构变得更优雅~

内部类的基本语法

顶层类只能处与public和默认级别,而成员内部类可以处与public,protected,默认和private这4种访问级别。

要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。

嵌套类有两种类型:

1.非静态内部类

2.静态内部类

1.非静态内部类

非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。

由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现。

//在自己创建的普通类中粘贴下面的代码就可以
int x = 123; //属于外部类的,也就是自己创建的类
	
	public class Inner{ //这一步,创建了内部类
		int y = 321;
	}

完整代码:

public class Outer {
	int x = 123;

	public class Inner {
		int y = 321;
	}
}

//先创建一个类叫Outer,在类里给x赋值
//再在Outer里输入public class Inner { },创建一个名字叫Inner的类
//这样,Outer这个类叫做Inner的外部类。Inner叫做Outer的内部类。

测试类:

public static void main(String[] args) {
		Outer myOuter = new Outer();               //①
		Outer.Inner myInner = myOuter.new Inner(); //②
		System.out.println(myOuter.x + myInner.y); //③
}

运行结果:

444

私有的内部类

上面说到成员内部类可以处与public,protected,默认和private这4种访问级别。如果你不希望内部类被外部类访问可以使用 private 修饰符来修饰内部类。

比如我们把上面的内部类前面的public换成private,再执行代码就会报错。其实应该能发现,再改成private之后,测试类中跟Inner有关的会报错。

2.静态内部类

静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问到它。我们把private改回public,在public后面加上static。

public static class Inner {

测试类中我们注释掉②(在②这一行的最前面输入//),在②的下面重新输入:

Outer.Inner myInner = new Outer.Inner();

 比较有无static关键字定义:

//Outer.Inner myInner = myOuter.new Inner(); //②
  Outer.Inner myInner = new Outer.Inner();

对比两行代码,②是通过创建外部类来访问,另一个是直接访问。

运行结果和之前相同。

注意:静态内部类无法访问外部类的成员。

从内部类访问外部类成员

接着上面的“注意:”,内部类中输入:int z = x + y;

public static class Inner {
		int y = 321;
		int z = x + y; //输入这一行
}

会发现x下面有红线,访问不到外部类的x,当把static删除之后,就可以访问到了。

当把static删掉之后,测试类中会有报错,因为删掉static之后不是静态内部类了,我们需要创建外部类来访问,所以把②的注释删掉(删掉//),把②下面一行注释掉(加上//),就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值