最全面Java內(nèi)部類總結(jié)(面試&查漏補(bǔ)缺必備)

前言

這幾天趁著時(shí)間多多菱农,回顧并總結(jié)出來超全面的Java內(nèi)部類知識(shí)垂睬;Java內(nèi)部類老實(shí)說我們?cè)陂_發(fā)的時(shí)候用的不多跨嘉,然而正是因?yàn)橛玫牟欢啵枚弥覀兙屯薐ava內(nèi)部類亡笑,所以才想寫這一篇博客侣夷,相信看了這篇博客之后,你絕對(duì)敢說學(xué)會(huì)了Java內(nèi)部類仑乌,如果遇到面試的時(shí)候百拓,吹給面試官聽,很可能面試官就會(huì)對(duì)你刮目相看(面試官內(nèi)心獨(dú)白:這個(gè)小伙子不錯(cuò)喲晰甚,Java內(nèi)部類用的不多都這么熟悉衙传,那么經(jīng)常使用的技術(shù)是不是非常熟練?)厕九。

下面先貼出一張超全的Java內(nèi)部類知識(shí)圖譜


在這里插入圖片描述

上面思維導(dǎo)圖已經(jīng)大部分說明了Java內(nèi)部類蓖捶,但是還是想把這篇博客的大綱列出來,這樣會(huì)更清晰一些止剖。

Java內(nèi)部類知識(shí)大綱

  1. 什么是內(nèi)部類
  2. 內(nèi)部類間接體現(xiàn)Java多繼承腺阳?
  3. 四大內(nèi)部類
  4. 成員內(nèi)部類
  5. 靜態(tài)內(nèi)部類
  6. 局部(方法)內(nèi)部類
  7. 匿名內(nèi)部類

什么是內(nèi)部類

將一個(gè)類定義在另一個(gè)類的內(nèi)部,這就是內(nèi)部類穿香。內(nèi)部類和普通類一樣亭引,都是類,都可以定義屬性皮获、方法 (包括構(gòu)造方法焙蚓,靜態(tài)方法等等)。通常將內(nèi)部類分為4種:成員內(nèi)部類洒宝、靜態(tài)內(nèi)部類购公、局部(方法)內(nèi)部類、匿名內(nèi)部類雁歌。在這四種內(nèi)部類之中宏浩,有的內(nèi)部類可以定義靜態(tài)成員,有些內(nèi)部類就不能定義靜態(tài)成員靠瞎,再下面將會(huì)一一說明比庄。

內(nèi)部類間接體現(xiàn)Java多繼承求妹?

我們都知道在Java中,一個(gè)類繼承另一個(gè)類佳窑,就會(huì)繼承那個(gè)類(父類制恍、基類)公有成員(屬性、方法)神凑,如果外部類繼承一個(gè)類净神,內(nèi)部類也繼承一個(gè)類(內(nèi)部類也是類,可以繼承類溉委,或者實(shí)現(xiàn)接口)鹃唯,又因?yàn)閮?nèi)部類可以直接訪問外部類的成員(屬性、方法)瓣喊,所以內(nèi)部類也可以訪問外部類繼承父類的成員俯渤,所以說內(nèi)部類的出現(xiàn)間接體現(xiàn)Java多繼承(雖然最多是繼承兩個(gè)類,外部類一個(gè)型宝,內(nèi)部類一個(gè))。這個(gè)是我個(gè)人的見解絮爷,如果有不同的想法看法趴酣,可以評(píng)論交流一下下。


在這里插入圖片描述

四種內(nèi)部類

雖然內(nèi)部類和普通的類一樣坑夯,都可以繼承類岖寞,實(shí)現(xiàn)接口,而且都可以定義成員(屬性柜蜈,方法)仗谆,但是它們之間還是有區(qū)別的;
比如成員內(nèi)部類就不能定義靜態(tài)成員(靜態(tài)變量淑履,靜態(tài)方法)隶垮,而靜態(tài)內(nèi)部類就可以定義靜態(tài)成員,下面將會(huì)一一介紹這四大內(nèi)部類秘噪,而且都會(huì)附帶完整的代碼說明狸吞,只講理論不給代碼都是不貼心的。

成員內(nèi)部類

我們?cè)趯W(xué)面向?qū)ο蟮臅r(shí)候指煎,應(yīng)該都知道static這個(gè)關(guān)鍵字蹋偏,被static修飾(屬性、方法)就是類級(jí)別的了至壤,也就是類成員(不依賴于對(duì)象威始,被該類所有對(duì)象共享),那么反過來不被static修飾就是對(duì)象成員了像街,所以成員內(nèi)部類就是不能被static修飾的黎棠,但是可以被四大權(quán)限修飾符修飾(public晋渺、private、...)葫掉。

外部類與成員內(nèi)部類

下面給出成員內(nèi)部類代碼些举,下面還會(huì)給出成員內(nèi)部類總結(jié),而這個(gè)總結(jié)就是從這個(gè)代碼里濃縮出來的(因?yàn)檎Z法錯(cuò)誤編譯器會(huì)報(bào)紅)俭厚。
代碼可能看起來有點(diǎn)長户魏,可以復(fù)制到IDEA中慢慢細(xì)讀,相信會(huì)有收獲的挪挤。

/**
 *  外部類內(nèi)部使用成員內(nèi)部類
 *      1.成員內(nèi)部類可以繼承類叼丑,實(shí)現(xiàn)接口
 *      2.成員內(nèi)部類不能創(chuàng)建靜態(tài)成員(靜態(tài)變量,靜態(tài)方法)
 *      3.不能在外部類靜態(tài)方法內(nèi)部創(chuàng)建成員內(nèi)部類對(duì)象
 *      4.如果外部類屬性與內(nèi)部類屬性同名時(shí)扛门,
 *          直接調(diào)用是訪問內(nèi)部類屬性鸠信,通過外部類名.this.屬性名訪問的是外部類屬性
 *  其他類內(nèi)部使用成員內(nèi)部類
 *      第一種方式:
 *          //創(chuàng)建外部類對(duì)象
 *          MemberInnerClass outer = new MemberInnerClass();
 *          //創(chuàng)建內(nèi)部類對(duì)象
 *          MemberInnerClass.InnerClass inner = outer.new InnerClass();
 *      第二種方式:
 *          //鏈?zhǔn)絼?chuàng)建內(nèi)部類對(duì)象
 *          MemberInnerClass.InnerClass innerClass = new MemberInnerClass().new InnerClass();
 */
@Data
public class MemberInnerClass {

    private Integer age = 22;
    private String name = "xq";
    private static String country = "中國";

    public void outerMethod() {
        System.out.println("我是外部類的成員方法!");
    }

    public static void outerStaticMethod() {
        System.out.println("我是外部類的靜態(tài)方法论寨!");
    }

    public class InnerClass {

        /**
         * 成員變量
         */
        private Integer age = 18;
        /**
         * 成員內(nèi)部類不允許定義靜態(tài)變量
         */
//        public static String name;    //報(bào)錯(cuò)

        /**
         * 構(gòu)造器
         */
        public InnerClass() {
        }

        /**
         * 內(nèi)部類成員方法星立,訪問外部類信息(屬性、方法)
         */
        public void innerCallOuter() {
            //當(dāng)內(nèi)部類屬性和外部類屬性不同名時(shí)葬凳,直接調(diào)用即可
            System.out.println(name);
            //當(dāng)內(nèi)部類屬性和外部類屬性同名時(shí)绰垂,訪問的是內(nèi)部類屬性
            System.out.println("內(nèi)部類age屬性:" + age);
            //當(dāng)內(nèi)部類屬性和外部類屬性同名時(shí),可通過外部類名.this.屬性名
            System.out.println("外部類age屬性:" + MemberInnerClass.this.age);
            System.out.println("外部類靜態(tài)變量:" + country);
            //訪問外部類的方法
            outerMethod();
            outerStaticMethod();
        }

        /**
         * 成員內(nèi)部類不允許定義靜態(tài)方法火焰,報(bào)錯(cuò)
         */
        /*public static void innerStaticMethod(){}*/
    }

    /**
     * 外部類靜態(tài)方法不能創(chuàng)建內(nèi)部類對(duì)象劲装,
     * 也就是在外部類靜態(tài)方法內(nèi)訪問不了內(nèi)部類信息
     * @param args
     */
    /*public static void main(String[] args) {
        InnerClass innerClass = new InnerClass();
    }*/

    /**
     * 外部類非靜態(tài)方法創(chuàng)建內(nèi)部類對(duì)象,訪問內(nèi)部類信息
     */
    public void outerCallInner() {
        InnerClass innerClass = new InnerClass();
        innerClass.innerCallOuter();
    }

    /**
     * 外部類靜態(tài)方法昌简,創(chuàng)建外部類對(duì)象占业,調(diào)用外部類成員方法(內(nèi)部訪問內(nèi)部類信息)
     *
     * @param args
     */
    public static void main(String[] args) {
        MemberInnerClass memberInnerClass = new MemberInnerClass();
        memberInnerClass.outerCallInner();
    }

}

其他類使用成員內(nèi)部類

public class MemberInnerClassTest {

    public static void main(String[] args) {
        //創(chuàng)建外部類對(duì)象
        MemberInnerClass outer = new MemberInnerClass();
        outer.outerCallInner();
        System.out.println("=========================");
        //創(chuàng)建內(nèi)部類對(duì)象
        MemberInnerClass.InnerClass inner = outer.new InnerClass();
        inner.innerCallOuter();

        System.out.println("========================");
        //鏈?zhǔn)絼?chuàng)建內(nèi)部類對(duì)象
        MemberInnerClass.InnerClass innerClass = new MemberInnerClass().new InnerClass();
        innerClass.innerCallOuter();

    }
}

成員內(nèi)部類總結(jié)

  1. 成員內(nèi)部類可以被任何的訪問修飾符修飾。
  2. 成員內(nèi)部類的內(nèi)部不能定義靜態(tài)成員纯赎。
  3. 成員內(nèi)部類也是類谦疾,可以繼承類,可以實(shí)現(xiàn)接口犬金,方法也可以重寫餐蔬,重載,this和super隨便使用佑附。
  4. 成員內(nèi)部類可以直接使用外部類的任何信息樊诺,如果屬性或者方法發(fā)生沖突,調(diào)用外部類.this.屬性或者方法音同。
  5. 其它類如何訪問成員內(nèi)部類词爬,被public修飾的成員內(nèi)部類,可以被不同包的其他類訪問权均;其他情況和普通類一樣...

靜態(tài)內(nèi)部類

靜態(tài)內(nèi)部類就是static修飾的內(nèi)部類顿膨,也可以被四大權(quán)限修飾符修飾锅锨。

外部類定義以及使用靜態(tài)內(nèi)部類

下面代碼以及注釋非常清晰說明了靜態(tài)內(nèi)部類的特性。

/**
 * 外部類&靜態(tài)內(nèi)部類
 */
public class StaticInnerClass {

    //和內(nèi)部類屬性同名
    private int age = 22;

    private String outer = "outerClass";
    private static String country = "china";

    static {
        System.out.println("外部類靜態(tài)代碼塊...");
    }

    public void outerMethod() {
        System.out.println("我是外部類的成員方法恋沃!");
    }

    public static void outerStaticMethod() {
        System.out.println("我是外部類的靜態(tài)方法必搞!");
    }

    /**
     * 靜態(tài)內(nèi)部類,需要使用static修飾
     */
    public static class InnerClass {

        private int age = 18;
        private String inner = "innerClass";

        //靜態(tài)內(nèi)部類可以定義靜態(tài)變量
        private static String country = "中國";

        static {
            System.out.println("內(nèi)部類靜態(tài)代碼塊...");
        }

        public void innerMethod() {
            //靜態(tài)內(nèi)部類不能訪問外部類非靜態(tài)成員屬性
//            System.out.println("outer:"+outer); 報(bào)錯(cuò)

            System.out.println("inner:" + inner);

            System.out.println("靜態(tài)內(nèi)部類age屬性:" + age);
            //靜態(tài)類內(nèi)部不能通過這種方式訪問外部類的同名屬性
//            System.out.println("外部類age屬性:"+StaticOuterClass.this.age);

            System.out.println("靜態(tài)內(nèi)部類static屬性:" + country);
            System.out.println("外部類static屬性:" + cn.zwq.innerclass.StaticInnerClass.country);

            //靜態(tài)內(nèi)部類不能調(diào)用外部類成員方法
//            outerMethod(); 報(bào)錯(cuò)
            //靜態(tài)內(nèi)部類可以調(diào)用外部類靜態(tài)方法
            outerStaticMethod();
        }

        /**
         * 靜態(tài)內(nèi)部類可以定義靜態(tài)方法
         */
        public static void innerStaticMethod() {
//            outerMethod(); 報(bào)錯(cuò)
            outerStaticMethod();
        }

        public static void main(String[] args) {
            //訪問靜態(tài)內(nèi)部類靜態(tài)屬性
            System.out.println(cn.zwq.innerclass.StaticInnerClass.InnerClass.country);
            //訪問靜態(tài)內(nèi)部類靜態(tài)方法
            cn.zwq.innerclass.StaticInnerClass.InnerClass.innerStaticMethod();
        }

    }
}

其他類使用靜態(tài)內(nèi)部類

創(chuàng)建靜態(tài)內(nèi)部類對(duì)象和創(chuàng)建成員內(nèi)部類對(duì)象稍微不同囊咏,可以和上面稍微對(duì)比一下就清晰了恕洲。

public class StaticInnerClassTest {

    public static void main(String[] args) {
        //創(chuàng)建靜態(tài)內(nèi)部類對(duì)象,和創(chuàng)建成員內(nèi)部類稍微不同
        StaticInnerClass.InnerClass innerClass = new StaticInnerClass.InnerClass();
        //訪問靜態(tài)內(nèi)部類方法(靜態(tài)梅割、非靜態(tài))
        innerClass.innerMethod();
        innerClass.innerStaticMethod();

        //直接調(diào)用靜態(tài)內(nèi)部類靜態(tài)屬性:外部類.靜態(tài)內(nèi)部類.靜態(tài)屬性(非私有的)
        StaticInnerClass.InnerClass.innerStaticMethod();
    }
}

在這里插入圖片描述

靜態(tài)內(nèi)部類總結(jié)

  1. 靜態(tài)內(nèi)部類使用static修飾霜第,可以定義非靜態(tài)成員,也可以定義靜態(tài)成員户辞。
  2. 靜態(tài)內(nèi)部類中的方法(成員方法泌类、靜態(tài)方法)只能訪問外部類的靜態(tài)成員,不能訪問外部類的非靜態(tài)成員底燎。
  3. 靜態(tài)內(nèi)部類可以被4大權(quán)限修飾符修飾刃榨,被public修飾而任意位置的其他類都可以訪問,被private修飾只能被外部類內(nèi)部訪問双仍。
  4. 靜態(tài)內(nèi)部類內(nèi)部的靜態(tài)成員喇澡,可以直接使用外部類.靜態(tài)內(nèi)部類.靜態(tài)成員訪問。

局部內(nèi)部類

局部內(nèi)部類是定義在方法內(nèi)部的殊校,我們可以想一下,以前定義方法的時(shí)候读存,有哪些限制为流?

  1. 首先呢,是變量不能使用權(quán)限修飾符修飾让簿,而局部內(nèi)部類就是方法內(nèi)部定義的變量敬察,所以局部內(nèi)部類也不能使用權(quán)限修飾符修飾。
  2. 這里先列舉一條限制尔当,下面還會(huì)給出更加詳細(xì)的總結(jié)莲祸。
/**
 * 局部內(nèi)部類
 */
public class LocalInnerClass {

    //和局部內(nèi)部類屬性同名
    private int age = 22;

    private String outer = "outerClass";
    private static String country = "china";

    public void outerMethod() {
        System.out.println("我是外部類的成員方法!");
    }

    public static void outerStaticMethod() {
        System.out.println("我是外部類的靜態(tài)方法椭迎!");
    }

    /**
     * 外部類成員方法锐帜,內(nèi)部定義局部內(nèi)部類
     */
    public void localInnerClass() {

        String name = "java";
        name = "javaEE";

        //報(bào)錯(cuò),局部內(nèi)部類不能被權(quán)限修飾符修飾
        /*public class InnerClass{

        }*/

        class InnerClass {

            private String inner = "inner";
            private int age = 18;

            //報(bào)錯(cuò)畜号,局部內(nèi)部類不能定義靜態(tài)成員(屬性缴阎、方法)
//            private static String country = "中國";
            /*public static void innerStaticMethod(){

            }*/

            public void innerMethod() {
                //報(bào)錯(cuò),因?yàn)榫植績?nèi)部類訪問方法定義的變量简软,該變量必須是final修飾的
//                System.out.println(name);報(bào)錯(cuò)
                System.out.println("局部內(nèi)部類inner屬性:" + inner);

                //訪問外部類信息
                System.out.println("外部類outer屬性:"+outer);
                System.out.println("局部內(nèi)部類age屬性:"+age);
                System.out.println("外部類age屬性:"+LocalInnerClass.this.age);
                System.out.println("外部類靜態(tài)屬性country:"+country);
                outerMethod();
                outerStaticMethod();
            }
        }

        /*
            局部內(nèi)部類只能在聲明的方法內(nèi)部使用
         */
        InnerClass innerClass = new InnerClass();
        innerClass.innerMethod();
        System.out.println(innerClass.age);
        System.out.println(innerClass.inner);
    }

}

局部內(nèi)部類總結(jié)

  1. 局部內(nèi)部類不能被權(quán)限修飾符修飾蛮拔。
  2. 局部內(nèi)部類只能在方法內(nèi)部使用述暂。
  3. 局部內(nèi)部類不能定義靜態(tài)成員。
  4. 局部內(nèi)部類可以直接訪問方法內(nèi)部的局部變量和方法參數(shù)建炫。
  5. 局部內(nèi)部類可以訪問外部類的靜態(tài)成員畦韭、非靜態(tài)成員。

局部內(nèi)部類注意點(diǎn)(重點(diǎn))

如果局部內(nèi)部類訪問方法內(nèi)部的局部變量肛跌、方法形參艺配,那么就要求這些局部變量、方法形參被final修飾惋砂,否則會(huì)報(bào)錯(cuò)妒挎。
下圖很好的說明了這個(gè)問題:


在這里插入圖片描述

匿名內(nèi)部類

  1. 首先匿名內(nèi)部類也是內(nèi)部類的一種,只不過它沒名字西饵。
  2. 匿名內(nèi)部類最常用的使用場(chǎng)景就是快速創(chuàng)建抽象類或接口的實(shí)例酝掩。
  3. 如果某個(gè)類判定只使用一次,那么就不要通過new關(guān)鍵字創(chuàng)建那個(gè)類的對(duì)象眷柔,而是使用匿名內(nèi)部類的方式期虾。
  4. 匿名內(nèi)部類的格式:
    new 實(shí)現(xiàn)接口() | 父類構(gòu)造器(實(shí)參列表){
     //匿名內(nèi)部類類體部分     
    };
    

5.接下來使用匿名內(nèi)部類創(chuàng)建Runnable接口的實(shí)例,創(chuàng)建Thread類的實(shí)例驯嘱。

public static void main(String[] args) {
    //使用匿名內(nèi)部類創(chuàng)建接口實(shí)例
    Runnable runnable = new Runnable() {
        @Override
        public void run() {

        }
    };
    //使用匿名內(nèi)部類創(chuàng)建Thread類實(shí)例
    Thread thread = new Thread(runnable,"小小線程"){
          
    };
}

好了镶苞,到這里Java內(nèi)部類已經(jīng)說完了,相信你看了這篇之后鞠评,之后面試被問到茂蚓,或者筆試題考到Java內(nèi)部類題目,都可以輕松解決了剃幌。
如果感覺OK的話聋涨,可以關(guān)注或者點(diǎn)贊博主我一下下,感謝负乡!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牍白,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抖棘,更是在濱河造成了極大的恐慌茂腥,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件切省,死亡現(xiàn)場(chǎng)離奇詭異最岗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)朝捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門仑性,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事诊杆〖呔瑁” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵晨汹,是天一觀的道長豹储。 經(jīng)常有香客問我,道長淘这,這世上最難降的妖魔是什么剥扣? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮铝穷,結(jié)果婚禮上钠怯,老公的妹妹穿的比我還像新娘。我一直安慰自己曙聂,他們只是感情好晦炊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宁脊,像睡著了一般断国。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榆苞,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天稳衬,我揣著相機(jī)與錄音,去河邊找鬼坐漏。 笑死薄疚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赊琳。 我是一名探鬼主播街夭,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慨畸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衣式,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤寸士,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后碴卧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弱卡,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年住册,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婶博。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荧飞,死狀恐怖凡人,靈堂內(nèi)的尸體忽然破棺而出名党,到底是詐尸還是另有隱情,我是刑警寧澤挠轴,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布传睹,位于F島的核電站,受9級(jí)特大地震影響岸晦,放射性物質(zhì)發(fā)生泄漏欧啤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一启上、第九天 我趴在偏房一處隱蔽的房頂上張望邢隧。 院中可真熱鬧,春花似錦冈在、人聲如沸倒慧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迫靖。三九已至,卻和暖如春兴使,著一層夾襖步出監(jiān)牢的瞬間系宜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工发魄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盹牧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓励幼,卻偏偏與公主長得像汰寓,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苹粟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359