Java內(nèi)部類到底是什么玩意(一)

前言

最近為了復(fù)習(xí)基礎(chǔ)學(xué)的東西比較雜,翻看Core Java了,看到內(nèi)部類這一塊感覺理解的和以前不一樣。

正文

為了做示例可能會用java GUI來說明更加合適,當然書上也是拿這個例子來做解釋的

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.Timer;

public class TestInnerClass {
    public static void main(String[] args) {
        TimerClock clock = new TimerClock(true);
        clock.start();
    }
}

class TimerClock {
    private boolean isClocked = false;
    public TimerClock(boolean isClocked) {
        this.isClocked = isClocked;
    }
    public void start() {
        ActionListener listener = this.new TimerPrinter();
        Timer t = new Timer(1000, listener);//定時器
        t.start();
    }
    private class TimerPrinter implements ActionListener{
    
        @Override
        public void actionPerformed(ActionEvent e) {
            if(!isClocked) {
                Date date = new Date();
                System.out.println(date);
            }else {
                Toolkit.getDefaultToolkit().beep();//會發(fā)出鈴聲
            }
        }   
    }
}

為什么內(nèi)部類可以訪問外部類的私有變量,我們可以單獨拎出來看,一開始我以為就是內(nèi)部類持有一個外部類的引用也就是內(nèi)部默認自動生成有

private TimerClock outer;
public TimerPrinter(TimerClock clock) {
       outer  = clock;
}

然后下面的調(diào)用就是outer.isClock(其實不是這樣傳的,不過機制是可以這么理解,后面會講到)那么外部類實際上生成的是TimerClock.this.isClock(區(qū)別內(nèi)部類的this)
問題又來了憑什么能夠訪問isClock變量,它不是私有的嗎,按照常理理解它在內(nèi)部當然能訪問外部變量了,但是實際上可能不是這樣的在外部類多了這么一行代碼

static boolean access$0(TimerClock clock) //返回beep值

然后內(nèi)部調(diào)用時調(diào)用access$0(outer)(方法名字可能變化,outer方便看懂);
明天稍微講一下局部內(nèi)部類和匿名內(nèi)部類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • Java 內(nèi)部類 分四種:成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。 1、成員內(nèi)部類: 即作為外部類的一個成...
    ikaroskun閱讀 1,253評論 0 13
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,267評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,096評論 0 4
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,691評論 0 11