內部類
內部類:在一個類的內部嵌套其它類的操作叫內部類。
簡單的內部類:
public class Outer {
private String msg = "hello world";
class Inner //定義一個內部類
{
public void print()
{
System.out.println(msg);
}
}
public void func()
{
Inner inner = new Inner();
inner.print();
}
}
public class MainTest {
public static void main(String[] args) {
Outer outer = new Outer();
outer.func();
}
}
引入內部類之後我們犧牲了程序的規範性,代碼有些混亂。但是換來的卻是內部類可以方便的操作外部類的私有屬性。
針對上面的代碼,我們可以修改爲:
public class Outer {
private String msg = "hello world";
public String getMsg()
{
return this.msg;
}
public void func()
{
Inner inner = new Inner(this);
//this表示當前類的對象,類似C++拷貝構造時return的this
inner.print();
}
}
public class Inner {
Outer out = new Outer();
public Inner(Outer out) //引用傳遞this.out = main.out
{
this.out = out;
}
public void print()
{
System.out.println(out.getMsg());
}
}
public class MainTest {
public static void main(String[] args) {
Outer outer = new Outer();
outer.func();
}
}
- 內部類的訪問只有通過外部類纔可以完成。
- 如果一個內部類只想被外部類使用,可以使用private關鍵字。
- 進行屬性訪問時必須加上this。
static修飾內部類
內部類使用了static修飾,該內部類只允許訪問外部類的static部分。
該內部類實例化的語句是:
外部類.內部類 內部類對象 = new 外部類.內部類();
eg:
public class Outer2 {
private static String msg = "hello world";
static class Inner
{
public void print()
{
System.out.println(msg);
}
}
public void func()
{
Inner in = new Inner();
in.print();
}
}
public class TestMain {
public static void main(String[] args) {
Outer2.Inner in = new Outer2.Inner();
in.print();
}
}
在方法中定義內部類
public class Outer3 {
private static String msg = "hello world";
public void func(int num)
{
class Inner
{
public void print()
{
System.out.println("num: " + num);
System.out.println("msg: " + msg);
}
}
new Inner().print();
}
}
public class TestMain {
public static void main(String[] args) {
Outer3 out = new Outer3();
out.func(33);
}
}
內部類的特點:
- 破壞了程序的結構。
- 方便進行私有屬性的訪問。(外部類也可以訪問內部類的私有域)
- 如果發現類名稱上出現了"." ,應當立即想到內部類的概念。
暫時不推薦使用!
我想一直陪着你,小馬同學。萬事如意~