黑馬程式設計師Java培訓和Android培訓:內部類

打的去看海的豬發表於2011-07-25
 

  看了很多視訊運用到了內部類的知識,想寫點東西給自己總結一下

 

內部類:在一個類中定義另外一個類.

內部類中對應的成員變數和成員方法 跟外部類對應的成員變數和方法 是不會有衝突的

而且內部類可以訪問外部類的所有成員

 

當main方法在outer類的外部,但是想要在main方法中用到Inner類  這個時候就需要獲得一個inner類的例項物件 才能呼叫其方法

主要方法是 在outer類中定義一個方法 這個方法可以獲得一個 inner的例項  然後在main函式中呼叫outer的這個獲得例項的方法 ,轉而呼叫內部類的方法

package Test;
class Outer{
 private int a=100;
class Inner
{
 private int a=50;
 void print()
 {
  int a=30;
  System.out.println(a);
  System.out.println(this.a);
  System.out.println(Outer.this.a);
 }
}
 void print()
 {
  Inner p=new Inner();
  p.print();
 }
 Inner getInner()
 {
  return new Inner();
 }
 
}
public class Test
{
 public static void main(String [] args)
 {
  Outer o=new Outer();
  Outer.Inner fi= o.getInner();
  fi.print();
 }
}

 

 

一個內部類想去訪問外部類的成員變數和方法,那麼就先必須有一個外部類的物件

如果將內部類放入方法中的話,那麼內部類就只限於在方法中使用,但是不管巢狀多深,都可以反問外部類的成員

如果內部類放在方法中的話,那麼內部類想訪問方法中的變數,必須把這個變數或者引數 定義為常量 即final型別

如果不需內部類訪問,則不需要將其設定為final型別

當把內部類定義為一個abstract型別時間,那麼就不能直接用內部類去例項化一個物件。可以在Outer類中定義一個從Inner派生出來的類,再例項化

當把Inner定義為static的話,就不能再繼續訪問Outer類的非靜態的成員變數和方法了,非static的內部類不能有靜態的方法

 

內部類實現介面的例子

package Test;
interface jiekou
{
void print();
 
}


class Outer{
 private int a=100;
class Inner implements jiekou
{
 private int a=50;
  public void print()
 {
  int a=30;
  System.out.println(a);
  System.out.println(this.a);
  System.out.println(Outer.this.a);
 }
}

 Inner getInner()
 {
  return new Inner();
 }

}
public class Test
{
 public static void main(String [] args)
 {
 Outer ou=new Outer();
 jiekou k=ou.getInner();
 k.print();
 }
 
}

相關文章