程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA基礎之內部類,JAVA基礎部類

JAVA基礎之內部類,JAVA基礎部類

編輯:JAVA綜合教程

JAVA基礎之內部類,JAVA基礎部類


JAVA基礎之內部類

2017-01-13

1、java中的內部類都有什麼?!

    成員內部類

    局部內部類

    匿名內部類

    靜態內部類

2、內部類詳解

    •成員內部類

      在一個類的內部再創建一個類,成為內部類

      1)在一個類中使用內部類,可以在內部類中直接存取所在類的私有屬性或方法

 1 class Outer{
 2     //外部類Outer
 3     private int i = 111 ;//外部類私有變量
 4     class Inner{
 5         //內部類Inner
 6         private int j = 222 ;//內部類私有變量
 7         public void print(){
 8             System.out.println("外部類的私有屬性"+ i);
 9             System.out.println("內部類的私有屬性"+ j);
10         }
11     }
12 }
13 public class ClassDemo5 {
14     public static void main(String[] args) {
15         Outer o = new Outer() ;
16         Outer.Inner i = o.new Inner() ; 
17         i.print() ;
18     }    
19 }

       2)內部類的實例化方法

import 面向對象基礎.Outer.Inner;  
//第一種方式:導入import 面向對象基礎.Outer.Inner;包
Outer.Inner i = o.new Inner() ;
 //第二種方式:外部類.內部類 對象名 = 外部類對象.new 內部類

         3)外部類訪問內部類

 1 class Fatch{
 2     //外部類Fatch
 3     public class Student{
 4         //內部類Student
 5         public void show(){
 6             //內部類show()方法
 7             System.out.println("內部類Student的show()方法");
 8         }
 9     }
10     public void print(){
11         /**
12          * 外部類不可以直接訪問內部類的屬性或方法,
13          * 必須創建內部類對象才可以訪問
14          */
15         new Student().show() ;    //使用匿名對象實例化調用內部類的類成員
16         System.out.println("外部類Fatch的print()方法");
17     }
18 }
19 public class ClassDemo4 {
20     public static void main(String[] args) {
21         Fatch f = new Fatch() ;    //實例化外部類對象
22         f.print() ;    //調用外部類的print()方法
23     }
24 }

      4)如果外部類和內部類具有相同的成員變量或方法,內部類默認訪問自己的成員變量或方法,如果要訪問外部類的成員變量,可以使用 this 關鍵字。

 1 class Outer1 {
 2     //外部類
 3     private int i = 10 ;//外部類私有變量
 4     class Inner1{
 5         //內部類
 6         private int i = 20 ;//內部類私有變量
 7         public void show(){
 8             //內部類方法
 9             System.out.println("內部類的變量"+ this.i );//使用this關鍵字訪問內部類成員
10             System.out.println("外部類的變量"+ Outer1.this.i);//使用外部類名.this.變量名 來訪問外部類成員
11         }
12     }
13     public void print(){
14         new Inner1().show() ;    //調用內部類方法
15     }
16 }
17 public class ClassDemo6 {
18     public static void main(String[] args) {
19         new Outer1().print() ;  
20     }
21 
22 }

   

        •注意點:

          »實例化內部類之前必須實例化外部類

          »內部類可以隨意訪問他的外部類成員,但外部類不可以直接訪問內部類的類成員

          »內部類可以被聲明為private 或 protected 權限的訪問

          »內部類對象會依賴於外部類對象,除非已經存在一個外部類對象,否則類中不會出現內部類對象

 

    •局部內部類(方法內部類)

      內部類不僅可以在類中進行定義,也可以在類的局部位置進行定義,例如在類的方法或者任意的作用域中都可以定義內部類

         1)在外部類的方法中定義一個方法內部類

 1 class Demo1{
 2     //外部類Demo
 3      final int I = 10 ;//外部類定義的常量
 4      public void show(){    //外部類的show()方法
 5          class Inne{        //方法內部類
 6              int j = 20 ;    //方法內部類變量
 7              private void inshow() {    //方法內部類中的inshow()方法
 8                  System.out.println("外部類常量"+ I );
 9                  System.out.println("方法內部類變量"+ j );
10             }
11          }
12          Inne in = new Inne()  ;    //實例化內部類對象
13          in.inshow() ;    //調用內部類方法
14      }
15 }
16 public class ClassDemo7 {
17     public static void main(String[] args) {
18         Demo1 d = new Demo1() ;
19         d.show() ;
20     }
21 }

    注意:如果方法中的參數需要被傳遞進去,就必須把參數聲明成final類型

 

      •靜態內部類

      如果一個內部類被聲明為static,此內部類就稱為外部類 

       1)靜態內部類可以通過(new 外部類名.內部類.內部類方法名) ,來調用靜態內部類方法

 1 class Outer2{
 2     //外部類
 3     private static String str = "張博傑" ;//外部類的靜態變量
 4     static class Inner2{
 5         //使用static聲明 的靜態內部類
 6         public void fun() {
 7             //靜態內部類方法
 8             System.out.println("外部類的靜態變量"+" "+ str);
 9         }
10     }
11 }
12 public class ClassDemo8 {
13     public static void main(String[] args) {
14         new Outer2.Inner2().fun() ;
15         //靜態內部類可以使用new 外部類名.內部類.內部類方法名 ,來調用靜態內部類方法
16     }
17 }

 

       

        •匿名內部類

          匿名內部類也就是沒有名字的內部類,正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫.使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口

          1)匿名內部類的實現

 1 abstract class A2 {    //抽象類A2
 2     public abstract void eat() ;
 3 }
 4 public class ClassDemo9 {
 5     public static void main(String[] args) {
 6         /**
 7          * 如果A2這個抽象類只用一次,那麼就可一使用匿名內部類來實現
 8          */
 9         A2 a = new A2(){
10             public void eat(){
11                 System.out.println("我要吃飯");
12             }
13         } ;
14         a.eat() ;
15     }
16 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved