12月30日 面向對象05------內部類

內部類


概述:把類定義在其他類的內部


特點:1.可以訪問外部類的成員,包括私有
2.外部類如果要訪問內部類,必須創建對象


位置:
1.成員位置定義的類 成員內部類
2.局部位置定義的類 局部內部類


成員內部類:
外部類名.內部類名 對象名 = 外部類對象.內部類對象;


內部類常用private修飾,保證數據的安全性。通過一個方法進行判斷


爲了方便訪問數據,使用static修飾,用類名直接訪問數據
靜態內部類訪問的外部類數據必須用static修飾,內部可以有靜態 非靜態方法
靜態內部類不能直接通過外部對象訪問(Warning) Outer.Inner oi = new Outer.Inner();




面試題:
要求請填空 分別輸出30 20 10 
    
class Outer
{
public int num = 10;
class Inner
{
public int num = 20;
public void show()
{
int num = 30;
System.out.println(___1___);
System.out.println(___2___);
System.out.println(___3___);
}
}
}


public class Test
{
public static void main(String[] args)
{
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}


1.num
2.this.num
3.Outer.this.num


局部內部類
可以直接訪問外部類的成員
在局部位置,可以創建內部類對象


面試題:
局部內部類訪問局部變量的注意事項?
1.局部內部類訪問局部變量必須用final修飾
2.局部變量隨着方法的調用而調用,隨着調用的完畢而消失,然而堆內存中的數據不會立刻消失。






匿名內部類
前提:存在一個類 或者 接口
格式:new 類名或者接口名(){重寫方法;}
本質:是一個繼承了該類(實現了該接口)的子類的匿名對象


interface Inter
{
public abstract void show();
public abstract void show2();
}


class Outer
{
public void method(){
/*
1個方法的時候
new Inter(){
public void show(){
System.out.println("Hello");
}
}.show();
*/
/*
有點麻煩……
new Inter(){
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
}.show();
new Inter(){
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
}.show2();
*/
/**********************************************************/
//多態
Inter in = new Inter(){
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
};
in.show();
in.show2();
}
}


public class Test
{
public static void main(String[] args)
{
Outer out = new Outer();
out.method();
}
}




匿名內部類在開發中的應用:
安卓開發常用




面試題:


//要求在控制檯輸出hello world
interface Inter
{
void show();
}


class Outer
{
//補全代碼
}


class OuterDemo
{
public static void main(String[] args)
{
Outer.method().show();
}
}


補全的代碼:
public static Inter method()
{
   return new Inter()
   {
      public void show()
      {
System.out.println("hello world");
      }
   };
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章