日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

thinking-in-java(10)内部类

發(fā)布時(shí)間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinking-in-java(10)内部类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【0】開(kāi)場(chǎng)白 1)內(nèi)部類(lèi):將一個(gè)類(lèi)的定義放在另一個(gè)類(lèi)的定義內(nèi)部,這個(gè)類(lèi)就是內(nèi)部類(lèi); 2)內(nèi)部類(lèi)優(yōu)點(diǎn):匿名內(nèi)部類(lèi)的一個(gè)優(yōu)點(diǎn)就是可以將解決問(wèn)題的代碼隔離,聚攏在一點(diǎn);
【10.1】創(chuàng)建內(nèi)部類(lèi) 【荔枝】把類(lèi)的定義置于外圍類(lèi)的里面 public class Parcel1 {class Contents { // 內(nèi)部類(lèi)private int i = 11;public int value() {return i;}}class Destination { // 內(nèi)部類(lèi)private String label;Destination(String whereTo) {label = whereTo;}String readLabel() {return label;}}// Using inner classes looks just like// using any other class, within Parcel1:// public void ship(String dest) {Contents c = new Contents(); // Destination d = new Destination(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel1 p = new Parcel1();p.ship("Tasmania");} } /* Tasmania */ 【荔枝】外部類(lèi)有一個(gè)方法, 該方法返回一個(gè)指向內(nèi)部類(lèi)的引用, 如下: public class Parcel2 {class Contents { // 內(nèi)部類(lèi)private int i = 11;public int value() { return i; }}class Destination { // 內(nèi)部類(lèi)private String label;Destination(String whereTo) {label = whereTo;}String readLabel() { return label; }}public Destination to(String s) { // 外部類(lèi)中的方法 返回一個(gè)指向 內(nèi)部類(lèi)的引用return new Destination(s);}public Contents contents() { // 外部類(lèi)中的方法 返回一個(gè)指向 內(nèi)部類(lèi)的引用return new Contents();}public void ship(String dest) {Contents c = contents();Destination d = to(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel2 p = new Parcel2();p.ship("Tasmania");Parcel2 q = new Parcel2();// Defining references to inner classes:Parcel2.Contents c = q.contents(); // 注意它調(diào)用內(nèi)部類(lèi)的方式 是 Parcel2.ContentsParcel2.Destination d = q.to("Borneo"); // // 注意它調(diào)用內(nèi)部類(lèi)的方式 是 Parcel2.Destination} } /* Tasmania */ 【補(bǔ)充】如果想從外部類(lèi)的非靜態(tài)方法之外的任意位置創(chuàng)建某個(gè)內(nèi)部類(lèi)的對(duì)象, 那么必須像在main方法中那樣,具體指明這個(gè)對(duì)象的類(lèi)型: OuterClassName.InnerClassName;
【10.2】鏈接到外部類(lèi) 1)內(nèi)部類(lèi)擁有訪(fǎng)問(wèn)外圍類(lèi)的所有元素的訪(fǎng)問(wèn)權(quán);
【荔枝】基于內(nèi)部類(lèi)實(shí)現(xiàn)迭代器設(shè)計(jì)模式 interface Selector {boolean end();Object current();void next(); } public class Sequence {private Object[] items;private int next = 0;public Sequence(int size) { items = new Object[size]; }public void add(Object x) {if (next < items.length)items[next++] = x;}// 迭代器設(shè)計(jì)模式private class SequenceSelector implements Selector { // 內(nèi)部類(lèi) 訪(fǎng)問(wèn)外部類(lèi)的 items 實(shí)例變量private int i = 0;public boolean end() { return i == items.length; }public Object current() { return items[i]; }public void next() {if (i < items.length)i++;}public void reverseSelector() { }}public Selector selector() { // 外部類(lèi)方法 創(chuàng)建內(nèi)部類(lèi)并返回該實(shí)例.return new SequenceSelector();}public static void main(String[] args) {Sequence sequence = new Sequence(10);for (int i = 0; i < 10; i++)sequence.add(Integer.toString(i));Selector selector = sequence.selector();while (!selector.end()) {System.out.print(selector.current() + " ");selector.next();}} } /** Output: 0 1 2 3 4 5 6 7 8 9*/// :~ 【補(bǔ)充】當(dāng)某個(gè)外圍類(lèi)的對(duì)象創(chuàng)建一個(gè)內(nèi)部類(lèi)對(duì)象時(shí),此內(nèi)部類(lèi)對(duì)象必定會(huì)秘密捕獲一個(gè)指向那個(gè)外圍類(lèi)對(duì)象的引用;然后,在你訪(fǎng)問(wèn)此外圍類(lèi)的成員時(shí), 就是用那個(gè)引用來(lái)選擇外圍類(lèi)的成員;
【10.3】使用.this(生成對(duì)外部類(lèi)對(duì)象的引用) 與 .new(在 new 表達(dá)式中提供對(duì)其他外部類(lèi)對(duì)象的引用) 【荔枝】如何使用 .this public class DotThis {void f() {System.out.println("DotThis.f()");}public class Inner { // 內(nèi)部類(lèi)public DotThis outer() {return DotThis.this; // key: 生成對(duì)外部類(lèi)對(duì)象的引用.}}public Inner inner() {return new Inner();}public static void main(String[] args) {DotThis dt = new DotThis();DotThis.Inner dti = dt.inner();dti.outer().f(); } } /** Output: DotThis.f()*/// :~ 【荔枝】如何使用.new public class DotNew {public class Inner { }public static void main(String[] args) {DotNew dn = new DotNew();// .new : 在new 表達(dá)式中 提供對(duì)其他外部類(lèi)對(duì)象的引用, 使用 .new 語(yǔ)法.DotNew.Inner dni = dn.new Inner(); }public void main2() {DotThis dt = new DotThis();DotThis.Inner inner = dt.new Inner();System.out.println(inner);} } // /:~ 【補(bǔ)充】 補(bǔ)充1)在擁有外部類(lèi)對(duì)象之前是不可能創(chuàng)建內(nèi)部類(lèi)對(duì)象的。這是因?yàn)閮?nèi)部類(lèi)對(duì)象會(huì)暗暗地連接到創(chuàng)建它的外部類(lèi)對(duì)象上; 補(bǔ)充2)如果創(chuàng)建的是靜態(tài)內(nèi)部類(lèi), 則靜態(tài)內(nèi)部類(lèi)不需要對(duì)外部類(lèi)對(duì)象的引用;
【荔枝】.new 應(yīng)用于 Parcel public class Parcel3 {class Contents { // 內(nèi)部類(lèi)private int i = 11;public int value() {return i;}}class Destination { // 內(nèi)部類(lèi)private String label;Destination(String whereTo) {label = whereTo;}String readLabel() {return label;}}public static void main(String[] args) {Parcel3 p = new Parcel3();// Must use instance of outer class// to create an instance of the inner class:// 必須使用外部類(lèi)對(duì)象實(shí)例 創(chuàng)建 內(nèi)部類(lèi)實(shí)例Parcel3.Contents c = p.new Contents();Parcel3.Destination d = p.new Destination("Tasmania");} } // /:~ 【10.4】?jī)?nèi)部類(lèi)與向上轉(zhuǎn)型 1)當(dāng)將內(nèi)部類(lèi)向上轉(zhuǎn)型為其基類(lèi), 尤其轉(zhuǎn)型為一個(gè)接口時(shí),內(nèi)部類(lèi)就有了用武之地;
【荔枝】?jī)?nèi)部類(lèi)向上轉(zhuǎn)型 // 荔枝:內(nèi)部類(lèi)向上轉(zhuǎn)型 class Parcel4 {// private 訪(fǎng)問(wèn)修飾符 的內(nèi)部類(lèi) 隱藏子類(lèi)的實(shí)現(xiàn)細(xì)節(jié).private class PContents implements Contents {private int i = 11;public int value() { return i; }}protected class PDestination implements Destination {private String label;private PDestination(String whereTo) { label = whereTo; }public String readLabel() { return label; }}public Destination destination(String s) {return new PDestination(s);}public Contents contents() {return new PContents();} } public class TestParcel {public static void main(String[] args) {Parcel4 p = new Parcel4();Contents c = p.contents(); // 內(nèi)部類(lèi)向上轉(zhuǎn)型.Destination d = p.destination("Tasmania");} } 【補(bǔ)充】 補(bǔ)充1)注意private內(nèi)部類(lèi)的訪(fǎng)問(wèn)權(quán)限;
【10.5】在方法和作用域內(nèi)的內(nèi)部類(lèi) 1)可以在一個(gè)方法里面或在任意的作用域內(nèi)定義內(nèi)部類(lèi);
【荔枝】局部?jī)?nèi)部類(lèi):在方法作用域內(nèi)創(chuàng)建一個(gè)完整的類(lèi) // 局部?jī)?nèi)部類(lèi)的經(jīng)典荔枝 public class Parcel5 {public Destination destination(String s) {class PDestination implements Destination { // 局部?jī)?nèi)部類(lèi),在方法中進(jìn)行定義private String label;private PDestination(String whereTo) {label = whereTo;}public String readLabel() {return label;}}return new PDestination(s); // 在同一個(gè)方法中 返回 局部?jī)?nèi)部類(lèi)的實(shí)例}public static void main(String[] args) {Parcel5 p = new Parcel5();Destination d = p.destination("Tasmania");} } // 【荔枝】如何在任意的作用域內(nèi)嵌入一個(gè)內(nèi)部類(lèi) // 荔枝:在任意作用域中嵌入一個(gè)內(nèi)部類(lèi). public class Parcel6 {private void internalTracking(boolean b) {if (b) { class TrackingSlip { // if 條件語(yǔ)句中 定義 局部?jī)?nèi)部類(lèi)private String id;TrackingSlip(String s) {id = s;}String getSlip() { return id; }}TrackingSlip ts = new TrackingSlip("slip");String s = ts.getSlip();System.out.println(s);} // 在 定義 TrackingSlip 的作用域之外 創(chuàng)建 TrackingSlip 實(shí)例是不可行的. // TrackingSlip instance = new TrackingSlip("str"); // syntax error.}public void track() {internalTracking(true);}public static void main(String[] args) {Parcel6 p = new Parcel6();p.track();} } 【10.6】匿名內(nèi)部類(lèi) 1)匿名內(nèi)部類(lèi)荔枝: public interface Contents {int value(); } // 荔枝-匿名內(nèi)部類(lèi) public class Parcel7 {public Contents contents() {return new Contents() { // 插入一個(gè)類(lèi)的定義 == 匿名內(nèi)部類(lèi)private int i = 11;public int value() {return i;}}; // 匿名內(nèi)部類(lèi)需要分號(hào).}public static void main(String[] args) {Parcel7 p = new Parcel7();Contents c = p.contents();} } 【補(bǔ)充】 補(bǔ)充1)contents方法將返回值的生成與表示這個(gè)返回值的類(lèi)的定義結(jié)合在一起; 補(bǔ)充2)匿名內(nèi)部類(lèi)語(yǔ)法說(shuō)明: 創(chuàng)建一個(gè)繼承自Contents的匿名類(lèi)的對(duì)象; 通過(guò)new表達(dá)式返回的引用被自動(dòng)向上轉(zhuǎn)型為 對(duì) Contents的引用;
【荔枝】上述匿名內(nèi)部類(lèi)(Parcel7.java)的語(yǔ)法是以下代碼的簡(jiǎn)化版本,如下: // 匿名內(nèi)部類(lèi)的等同版本(不過(guò)本版本要比匿名內(nèi)部類(lèi)復(fù)雜得多) public class Parcel7b {// 創(chuàng)建一個(gè)繼承自 Contents 的 匿名類(lèi)的對(duì)象class MyContents implements Contents {private int i = 11;public int value() {return i;}}// 創(chuàng)建方法返回的引用被自動(dòng) 向上轉(zhuǎn)型為 對(duì) Contents 的 引用public Contents contents() {return new MyContents();}public static void main(String[] args) {Parcel7b p = new Parcel7b();Contents c = p.contents();} } 以上代碼使用了默認(rèn)構(gòu)造器來(lái)生成 Contents對(duì)象, 如果構(gòu)造器是有參數(shù)的, 怎么辦?
【荔枝】基于有參構(gòu)造器定義匿名內(nèi)部類(lèi) public class Wrapping {private int i;public Wrapping(int x) { i = x; }public int value() { return i; } } // 荔枝-基于有參構(gòu)造器 定義匿名內(nèi)部類(lèi) public class Parcel8 {public Wrapping wrapping(int x) {return new Wrapping(x) { // 傳遞給有參構(gòu)造器. public int value() {return super.value() * 47; // super.value() 是基類(lèi)方法返回值}}; // 匿名內(nèi)部類(lèi)需要分號(hào)}public static void main(String[] args) {Parcel8 p = new Parcel8();Wrapping w = p.wrapping(10);System.out.println(w.value());} } 【荔枝】在匿名內(nèi)部類(lèi)中定義字段時(shí), 可以對(duì)其執(zhí)行初始化操作 // 荔枝-在匿名內(nèi)部類(lèi)中定義字段時(shí), 可以對(duì)其執(zhí)行初始化操作 public class Parcel9 {// 希望 匿名內(nèi)部類(lèi) 使用一個(gè) 在其外部定義的 對(duì)象,其參數(shù)引用必須為finalpublic Destination destination(final String dest) { return new Destination() {private String label = dest;public String readLabel() { return label; }}; // 需要分號(hào)}public static void main(String[] args) {Parcel9 p = new Parcel9();Destination d = p.destination("Tasmania");System.out.println(d.readLabel());}public static void f1() {}public void f2(){ f1(); } } /* Tasmania */ 【補(bǔ)充】希望 匿名內(nèi)部類(lèi) 使用一個(gè) 在其外部定義的 對(duì)象,其參數(shù)引用必須為final
在匿名內(nèi)部類(lèi)中不可能有命名構(gòu)造器(因?yàn)樗緵](méi)名字)。但通過(guò)實(shí)例初始化, 就能夠達(dá)到為匿名內(nèi)部類(lèi)創(chuàng)建一個(gè)構(gòu)造器的效果,就像這樣: 【荔枝】通過(guò)實(shí)例初始化為匿名內(nèi)部類(lèi)創(chuàng)建一個(gè)構(gòu)造器 // 荔枝-通過(guò)實(shí)例初始化為匿名內(nèi)部類(lèi)創(chuàng)建一個(gè)構(gòu)造器 abstract class Base {public Base(int i) { print("Base constructor, i = " + i); }public abstract void f(); } public class AnonymousConstructor {public static Base getBase(int i) {// 通過(guò)實(shí)例初始化, 就能夠達(dá)到為 匿名內(nèi)部類(lèi)創(chuàng)建一個(gè)構(gòu)造器的效果.return new Base(i) {{print("Inside instance initializer");}public void f() {print("In anonymous f(), and i = " + i);}};}public static void main(String[] args) {Base base = getBase(47);base.f();} } /* Base constructor, i = 47 Inside instance initializer In anonymous f(), and i = 47 */ 【補(bǔ)充】在上述荔枝中, 不要求變量i一定是final的。因?yàn)?i 被傳遞給匿名類(lèi)的基類(lèi)構(gòu)造器, 他并不會(huì)在匿名內(nèi)部類(lèi)的內(nèi)部被直接使用;
【荔枝】為內(nèi)部類(lèi)字段進(jìn)行賦值,則方法參數(shù)必須是 final // 荔枝-為內(nèi)部類(lèi)字段進(jìn)行賦值, 則方法參數(shù) 必須是 final public class Parcel10 { // 為內(nèi)部類(lèi)字段進(jìn)行賦值, 則方法參數(shù) 必須是 finalpublic Destination destination(final String dest, final float price) {return new Destination() {private int cost;// 對(duì)每個(gè)對(duì)象進(jìn)行初始化{cost = Math.round(price); // 四舍五入if (cost > 100)System.out.println("Over budget!");}private String label = dest;public String readLabel() {return label;}};}public static void main(String[] args) {Parcel10 p = new Parcel10();Destination d = p.destination("Tasmania", 101.395F);System.out.println(d.readLabel());} } /* Over budget! Tasmania */ 【補(bǔ)充】匿名內(nèi)部類(lèi)與正規(guī)的繼承相比有些受限:因?yàn)槟涿麅?nèi)部類(lèi)既可以擴(kuò)展類(lèi),也可以實(shí)現(xiàn)接口,但不能兩者兼?zhèn)洹H绻麑?shí)現(xiàn)接口,也只能實(shí)現(xiàn)一個(gè)接口;
【10.6.1】在訪(fǎng)工廠方法 【荔枝】基于匿名內(nèi)部類(lèi)的工廠方法 interface Service { void method1(); void method2(); } interface ServiceFactory { Service getService(); } // 荔枝-通過(guò)匿名內(nèi)部類(lèi) 實(shí)現(xiàn)工廠方法模式(經(jīng)典荔枝) class Implementation1 implements Service {private Implementation1() { }public void method1() { print("Implementation1 method1"); }public void method2() { print("Implementation1 method2"); }public static ServiceFactory factory = new ServiceFactory() { // 靜態(tài)匿名內(nèi)部類(lèi)public Service getService() { return new Implementation1(); }}; } class Implementation2 implements Service {private Implementation2() { }public void method1() { print("Implementation2 method1"); }public void method2() { print("Implementation2 method2"); }public static ServiceFactory factory = new ServiceFactory() { // 靜態(tài)匿名內(nèi)部類(lèi)public Service getService() { return new Implementation2(); }}; } public class Factories {public static void serviceConsumer(ServiceFactory fact) {Service s = fact.getService();s.method1();s.method2();}public static void main(String[] args) {serviceConsumer(Implementation1.factory);serviceConsumer(Implementation2.factory);} } /** Output: * Implementation1 method1 * Implementation1 method2 * Implementation2 method1* Implementation2 method2*/// :~ 【荔枝】通過(guò)匿名內(nèi)部類(lèi) 實(shí)現(xiàn)工廠方法模式(經(jīng)典荔枝) interface Game { boolean move(); } interface GameFactory { Game getGame(); } //通過(guò)匿名內(nèi)部類(lèi) 實(shí)現(xiàn)工廠方法模式(經(jīng)典荔枝) class Checkers implements Game {private Checkers() {}private int moves = 0;private static final int MOVES = 3;public boolean move() {print("Checkers move " + moves);return ++moves != MOVES;}public static GameFactory factory = new GameFactory() { // 匿名內(nèi)部類(lèi).public Game getGame() { return new Checkers(); }}; } class Chess implements Game {private Chess() {}private int moves = 0;private static final int MOVES = 4;public boolean move() {print("Chess move " + moves);return ++moves != MOVES;}public static GameFactory factory = new GameFactory() { // 匿名內(nèi)部類(lèi).public Game getGame() { return new Chess(); }}; } public class Games {public static void playGame(GameFactory factory) {Game s = factory.getGame();while (s.move()) ;}public static void main(String[] args) {playGame(Checkers.factory);playGame(Chess.factory);} } /* Checkers move 0 Checkers move 1 Checkers move 2 Chess move 0 Chess move 1 Chess move 2 Chess move 3 */ 【10.7】嵌套類(lèi)(靜態(tài)內(nèi)部類(lèi)) 1)靜態(tài)內(nèi)部類(lèi)意味著: 1.1)要?jiǎng)?chuàng)建匿名內(nèi)部類(lèi)的對(duì)象,并不需要其外圍類(lèi)對(duì)象; 1.2)不能從匿名內(nèi)部類(lèi)的對(duì)象中訪(fǎng)問(wèn)非靜態(tài)的外圍類(lèi)對(duì)象; 2)靜態(tài)內(nèi)部類(lèi)與普通內(nèi)部類(lèi)的區(qū)別:普通內(nèi)部類(lèi)的字段與方法, 只能放在類(lèi)的外部層次上, 所以普通內(nèi)部類(lèi)不能有static數(shù)據(jù)和static字段,也不能包含 靜態(tài)內(nèi)部類(lèi)。 但是靜態(tài)內(nèi)部類(lèi)里是可以包含所有這些東西的;
【荔枝】靜態(tài)內(nèi)部類(lèi)可以包含static數(shù)據(jù),static字段和方法,也可以包含普通的字段和方法 // 嵌套類(lèi)(靜態(tài)內(nèi)部類(lèi))的荔枝 public class Parcel11 {// 靜態(tài)內(nèi)部類(lèi)private static class ParcelContents implements Contents {private int i = 11;public int value() { return i; }}// 靜態(tài)內(nèi)部類(lèi)protected static class ParcelDestination implements Destination {private String label; // 普通變量private ParcelDestination(String whereTo) {label = whereTo;}public String readLabel() { // 普通方法return label;}public static void f() { } // 靜態(tài)方法static int x = 10; // 靜態(tài)變量static class AnotherLevel { // 靜態(tài)內(nèi)部類(lèi)( 嵌套類(lèi) )public static void f() { } // 靜態(tài)方法static int x = 10; // 靜態(tài)變量int y = 10; // 普通變量}class A { // 普通內(nèi)部類(lèi)class B {class C { }}}}public static Destination destination(String s) {return new ParcelDestination(s);}public static Contents contents() {return new ParcelContents();}public static void main(String[] args) {Contents c = contents();Destination d = destination("Tasmania");} } 【10.7.1】接口內(nèi)部的類(lèi) 1)正常情況下, 不能在接口內(nèi)部放置任何代碼,但靜態(tài)內(nèi)部類(lèi)可以作為接口的一部分; 2)放置到接口中的任何類(lèi)都默認(rèn)是 public static;
【荔枝】在接口內(nèi)部定義靜態(tài)內(nèi)部類(lèi) // 在接口作用域內(nèi)放置 嵌套類(lèi)(靜態(tài)內(nèi)部類(lèi)) // 接口中的類(lèi) 自動(dòng)是 public 和 static 的. interface ClassInInterface{void howdy();class Test implements ClassInInterface { // 默認(rèn)是 public staticpublic void howdy() {System.out.println("Howdy!");}public static void test() {System.out.println("my name is test.");}public static void main(String[] args) {new Test().howdy(); }} } /* 錯(cuò)誤: 找不到或無(wú)法加載主類(lèi) chapter10.ClassInInterfaceTest$Test */ 【補(bǔ)充】在每個(gè)類(lèi)中都寫(xiě)main方法來(lái)測(cè)試。這樣做有一個(gè)缺點(diǎn): 那就是必須帶著那些已經(jīng)編譯過(guò)的額外代碼。如果這對(duì)你是個(gè)麻煩,那就可以使用匿名內(nèi)部類(lèi)來(lái)放置測(cè)試代碼; //荔枝-使用匿名內(nèi)部類(lèi)來(lái)放置測(cè)試代碼 public class TestBed {public void f() {System.out.println("f()");}public static class Tester {public static void main(String[] args) {TestBed t = new TestBed();t.f();}} } /** Output: f()*/ 【說(shuō)明】這生成了一個(gè)獨(dú)立的類(lèi) TestBed$Tester(要運(yùn)行這個(gè)程序, 執(zhí)行 java TestBed$Tester 即可);可以使用這個(gè)類(lèi)來(lái)做測(cè)試, 但不必再發(fā)布的產(chǎn)品中包含它, 在將產(chǎn)品打包前可以簡(jiǎn)單地刪除 TestBed$Tester.class; 【10.7.2】從多層嵌套類(lèi)中訪(fǎng)問(wèn)外部類(lèi)的成員 1)一個(gè)內(nèi)部類(lèi)被嵌套多少層并不重要:它能透明地訪(fǎng)問(wèn)所有它所嵌入的外圍類(lèi)的所有成員;
【荔枝】從多層嵌套類(lèi)中訪(fǎng)問(wèn)外部類(lèi)的成員 // 荔枝-從多層嵌套類(lèi)中訪(fǎng)問(wèn)外部類(lèi)的成員 class MNA {private void f() {}class A {private void g() {}public class B {// 從多層嵌套類(lèi)中 訪(fǎng)問(wèn)外部類(lèi)的成員.void h() {g(); // 調(diào)用 A.g()f(); // 調(diào)用 MNA.f()}}} }public class MultiNestingAccess {public static void main(String[] args) {MNA mna = new MNA();MNA.A mnaa = mna.new A(); // .new 表達(dá)式提供對(duì)其他外部類(lèi)對(duì)象的引用.MNA.A.B mnaab = mnaa.new B();mnaab.h();} } // /:~ 【10.8】為什么需要內(nèi)部類(lèi)? 1)內(nèi)部類(lèi)最吸引人的原因: 每個(gè)內(nèi)部類(lèi)都能獨(dú)立繼承自一個(gè)(接口的)實(shí)現(xiàn), 所以無(wú)論外圍類(lèi)是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn), 對(duì)于內(nèi)部類(lèi)都沒(méi)有影響; 2)內(nèi)部類(lèi)使得多重繼承的解決方案變得完整。接口解決了多重繼承的部分問(wèn)題, 內(nèi)部類(lèi)有效地實(shí)現(xiàn)了 多重繼承。也就是說(shuō), 內(nèi)部類(lèi)允許繼承多個(gè)非接口類(lèi)型(譯注:類(lèi)或抽象類(lèi));
3)考慮以下情形:必須在一個(gè)類(lèi)中以某種方式實(shí)現(xiàn)兩個(gè)接口。 有兩種實(shí)現(xiàn)方式:使用單一類(lèi), 或者使用內(nèi)部類(lèi); // 荔枝-實(shí)現(xiàn)多重接口的荔枝 // 方式1-使用單一類(lèi) class X implements A, B {}// 方式2-使用內(nèi)部類(lèi), 如下: // 外部類(lèi)本身實(shí)現(xiàn)一個(gè)接口; // 外部類(lèi)的方法返回一個(gè)匿名內(nèi)部類(lèi)(匿名內(nèi)部類(lèi)就是一個(gè)接口類(lèi)型), 以達(dá)到實(shí)現(xiàn)兩個(gè)接口的目的; class Y implements A {B makeB() {// 匿名內(nèi)部類(lèi)return new B() {};} } public class MultiInterfaces {static void takesA(A a) {}static void takesB(B b) {}public static void main(String[] args) {X x = new X();Y y = new Y();takesA(x);takesA(y);takesB(x);takesB(y.makeB()); // this line.(bingo)} } 4)如果擁有的是抽象類(lèi)或具體類(lèi),而不是接口, 那就只能使用內(nèi)部類(lèi)才能實(shí)現(xiàn)多重繼承; (干貨——使用內(nèi)部類(lèi)才能實(shí)現(xiàn)多重繼承)
【荔枝】使用內(nèi)部類(lèi)才能實(shí)現(xiàn)多重繼承 class D {} // 具體類(lèi) abstract class E {} // 抽象類(lèi)// 荔枝-使用內(nèi)部類(lèi)才能實(shí)現(xiàn)多重繼承 class Z extends D {E makeE() {return new E() {};} }public class MultiImplementation {static void takesD(D d) {}static void takesE(E e) {}public static void main(String[] args) {Z z = new Z();takesD(z);takesE(z.makeE());} } 5)內(nèi)部類(lèi)有以下特性: 特性1)內(nèi)部類(lèi)可以有多個(gè)實(shí)例, 每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其外圍類(lèi)對(duì)象的信息相互獨(dú)立; 特性2)在單個(gè)外圍類(lèi)中, 可以讓多個(gè)內(nèi)部類(lèi)以不同方式實(shí)現(xiàn)同一個(gè)接口,或繼承同一個(gè)類(lèi); 特性3)創(chuàng)建內(nèi)部類(lèi)對(duì)象的時(shí)刻并不依賴(lài)于外圍類(lèi)對(duì)象的創(chuàng)建; 特性4)內(nèi)部類(lèi)并沒(méi)有 is-a 關(guān)系, 他就是一個(gè)獨(dú)立實(shí)體;
【10.8.1】閉包與回調(diào) 1)閉包是一個(gè)可調(diào)用的對(duì)象,他記錄了一些信息,這些信息來(lái)自于創(chuàng)建它的作用域; 2)內(nèi)部類(lèi)是面向?qū)ο蟮拈]包: 因?yàn)閮?nèi)部類(lèi)不僅包含外圍類(lèi)對(duì)象(創(chuàng)建內(nèi)部類(lèi)的作用域)的信息,還自動(dòng)擁有一個(gè)指向指向此外圍類(lèi)對(duì)象的引用,在此作用域內(nèi),內(nèi)部類(lèi)有權(quán)操作所有成員,包括private成員;
【荔枝】通過(guò)內(nèi)部類(lèi)提供閉包功能 // 荔枝-通過(guò)內(nèi)部類(lèi)提供閉包功能 interface Incrementable { void increment(); } // 類(lèi)本身實(shí)現(xiàn)接口 class Callee1 implements Incrementable {private int i = 0;public void increment() { i++; print(i); } }class MyIncrement {public void increment() { print("Other operation"); }static void f(MyIncrement mi) { mi.increment(); } } // 類(lèi)的內(nèi)部類(lèi)實(shí)現(xiàn)接口 class Callee2 extends MyIncrement {private int i = 0;@Overridepublic void increment() {super.increment(); i++; print(i);}// 閉包內(nèi)部類(lèi)private class Closure implements Incrementable {public void increment() {// 指定外部類(lèi)方法,否則你將得到一個(gè)無(wú)限循環(huán).Callee2.this.increment(); // 返回外部類(lèi)對(duì)象的引用(鉤子),利用鉤子調(diào)用外部類(lèi)的方法,稱(chēng)為回調(diào)}}// 返回回調(diào)引用Incrementable getCallbackReference() { return new Closure(); } } class Caller {private Incrementable callbackReference;Caller(Incrementable cbh) { callbackReference = cbh; }void go() { callbackReference.increment(); } } public class Callbacks {public static void main(String[] args) {Callee1 c1 = new Callee1();Callee2 c2 = new Callee2();MyIncrement.f(c2); // Other operation 1Caller caller1 = new Caller(c1);Caller caller2 = new Caller(c2.getCallbackReference()); // 獲得回調(diào)引用caller1.go(); // 1 caller1.go(); // 2caller2.go(); // Other operation 2caller2.go(); // Other operation 3} } /* Other operation 1 1 2 Other operation 2 Other operation 3 */ 分析1)內(nèi)部類(lèi)Closure 實(shí)現(xiàn)了 Incrementable接口,以提供返回 Callee2的鉤子; 分析2)Caller的構(gòu)造器需要一個(gè) Incrementable 的引用作為參數(shù)(雖然可以在任意時(shí)刻捕獲回調(diào)引用),然后在以后的某個(gè)時(shí)刻,Caller對(duì)象可以使用此引用回調(diào)Callee類(lèi);
【10.9】?jī)?nèi)部類(lèi)的繼承 // 荔枝-內(nèi)部類(lèi)的繼承 class WithInner {class Inner {} }public class InheritInner extends WithInner.Inner {// InheritInner() {} // 這個(gè)無(wú)參構(gòu)造器 無(wú)法編譯,Won't compileInheritInner(WithInner wi) {wi.super();}public static void main(String[] args) {WithInner wi = new WithInner();InheritInner ii = new InheritInner(wi);} } // /:~ 分析1)InheritInner只繼承自?xún)?nèi)部類(lèi),而不是外圍類(lèi); 分析2)當(dāng)要生成一個(gè)構(gòu)造器時(shí),默認(rèn)的構(gòu)造器并不算好,而且不能只是傳遞一個(gè)指向外圍類(lèi)對(duì)象的引用。 分析3)必須在構(gòu)造器內(nèi)使用如下語(yǔ)法: enclosingClassReference.super(); 這樣才提供了必要的引用, 然后程序才能通過(guò)編譯;
【10.10】?jī)?nèi)部類(lèi)可以被覆蓋嗎? 1)內(nèi)部類(lèi)覆蓋:如果創(chuàng)建一個(gè)內(nèi)部類(lèi),然后繼承其外圍類(lèi)并重新定義此內(nèi)部類(lèi)時(shí),會(huì)發(fā)生什么呢? 2)覆蓋內(nèi)部類(lèi)并不起什么作用; // 荔枝-覆蓋內(nèi)部類(lèi)(不起任何作用) class Egg {private Yolk y;protected class Yolk {public Yolk() { print("Egg.Yolk()"); } // 2, 而是調(diào)用這個(gè) Yolk 構(gòu)造方法。}public Egg() {print("New Egg()"); // 1y = new Yolk();} }public class BigEgg extends Egg {// 內(nèi)部類(lèi) BigEgg.Yolk 沒(méi)有覆蓋 內(nèi)部類(lèi) Egg.Yolk public class Yolk {public Yolk() { print("BigEgg.Yolk()"); } // not this one. 并沒(méi)有調(diào)用這個(gè) Yolk 構(gòu)造方法。}public static void main(String[] args) {new BigEgg();} } /* New Egg() Egg.Yolk() */ 3)明確地繼承某個(gè)內(nèi)部類(lèi)是奏效的, 如下: // 荔枝-明確地繼承某個(gè)內(nèi)部類(lèi)是奏效的 class Egg2 {protected class Yolk {public Yolk() { print("Egg2.Yolk()"); } // 1, 3public void f() { print("Egg2.Yolk.f()"); }}private Yolk y = new Yolk();public Egg2() { print("New Egg2()"); } // 2public void insertYolk(Yolk yy) { y = yy; }public void g() { y.f(); } }public class BigEgg2 extends Egg2 {// 內(nèi)部類(lèi) BigEgg2.Yolk 明確繼承繼承 另一個(gè)外部類(lèi)的內(nèi)部類(lèi) Egg2.Yolkpublic class Yolk extends Egg2.Yolk {public Yolk() { print("BigEgg2.Yolk()"); } // 4public void f() { print("BigEgg2.Yolk.f()"); } // 5}public BigEgg2() { insertYolk(new Yolk()); }public static void main(String[] args) {Egg2 e2 = new BigEgg2();e2.g();} } /* Egg2.Yolk() New Egg2() Egg2.Yolk() BigEgg2.Yolk() BigEgg2.Yolk.f() */ 【10.11】局部?jī)?nèi)部類(lèi) 1)介紹: 局部?jī)?nèi)部類(lèi)不能有訪(fǎng)問(wèn)說(shuō)明符,因?yàn)樗皇峭鈬?lèi)的一部分;但是他可以訪(fǎng)問(wèn)當(dāng)前代碼塊內(nèi)的常量,以及此外圍類(lèi)的所有成員; 2)對(duì)局部?jī)?nèi)部類(lèi)與匿名內(nèi)部類(lèi)的創(chuàng)建進(jìn)行了比較,荔枝如下: // 荔枝-局部?jī)?nèi)部類(lèi) // 荔枝-對(duì)局部?jī)?nèi)部類(lèi)與匿名內(nèi)部類(lèi)的創(chuàng)建進(jìn)行了比較 interface Counter { int next(); } public class LocalInnerClass {private int count = 0;Counter getCounter(final String name) {class LocalCounter implements Counter { // 方法域中聲明 局部?jī)?nèi)部類(lèi)public LocalCounter() { print("LocalCounter()"); }public int next() {printnb(name); return count++; // 共同操作 外部類(lèi)的字段}}return new LocalCounter();}Counter getCounter2(final String name) {return new Counter() { // 匿名內(nèi)部類(lèi)完成 與 局部?jī)?nèi)部類(lèi)相同的工作{ print("Counter()"); }public int next() {printnb(name); return count++; // 共同操作 外部類(lèi)的字段}};}public static void main(String[] args) {LocalInnerClass lic = new LocalInnerClass();Counter c1 = lic.getCounter("Local inner "), c2 = lic.getCounter2("Anonymous inner ");for (int i = 0; i < 5; i++)print(c1.next());for (int i = 0; i < 5; i++)print(c2.next());} } /* LocalCounter() Counter() Local inner 0 Local inner 1 Local inner 2 Local inner 3 Local inner 4 Anonymous inner 5 Anonymous inner 6 Anonymous inner 7 Anonymous inner 8 Anonymous inner 9 */ 【補(bǔ)充】為什么有些時(shí)候仍然使用局部?jī)?nèi)部類(lèi),不是已經(jīng)有匿名內(nèi)部類(lèi)了嗎? 理由1)需要一個(gè)已命名的構(gòu)造器,或者需要重載構(gòu)造器,而匿名內(nèi)部類(lèi)只能用于實(shí)例化; 理由2)需要不止一個(gè)該內(nèi)部類(lèi)的對(duì)象;
【10.12】?jī)?nèi)部類(lèi)標(biāo)識(shí)符 1)內(nèi)部類(lèi)生成一個(gè) .class文件以包含他們的 Class 對(duì)象信息; 2)這些類(lèi)文件的命名有嚴(yán)格的規(guī)則: 外圍類(lèi)的名字, 加上 $ , 再加上內(nèi)部類(lèi)的名字; 3)荔枝: LocalInnerClass.java 生成的 .class 文件包括: Counter.class // 接口 LocalInnerClass$1.class // 匿名內(nèi)部類(lèi) LocalInnerClass$1LocalCounter.class // 局部?jī)?nèi)部類(lèi) LocalInnerClass.class // LocalInnerClass類(lèi)

總結(jié)

以上是生活随笔為你收集整理的thinking-in-java(10)内部类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

在线观影网站 | 久久久受www免费人成 | 国产日产高清dvd碟片 | 亚洲六月丁香色婷婷综合久久 | 涩涩成人在线 | 免费在线观看午夜视频 | 国产精品女| 一区二区三区在线观看 | 丁香婷婷色月天 | 久久99久久久久久 | 少妇av网| 美女久久久久 | 人人爽人人爱 | 亚洲婷久久| 成人午夜黄色影院 | 娇妻呻吟一区二区三区 | 丝袜美腿在线视频 | 国产中文字幕视频在线观看 | 免费观看性生活大片 | 免费99| 久久 亚洲视频 | 午夜婷婷在线播放 | 人人爱在线视频 | 天天看天天干 | 免费进去里的视频 | 2023亚洲精品国偷拍自产在线 | 在线视频婷婷 | 日韩在线观看电影 | 在线观看日韩精品 | 岛国大片免费视频 | 九九精品视频在线看 | 国产在线观看91 | 黄色日批网站 | 国产福利91精品一区二区三区 | 99热这里只有精品在线观看 | 亚洲精品国产成人av在线 | 免费观看久久 | 麻豆91精品 | 美女av免费 | 中文字幕有码在线 | 日韩av成人在线 | 亚洲国产成人精品在线观看 | 国产麻豆精品免费视频 | 久久久亚洲麻豆日韩精品一区三区 | 在线观看中文字幕网站 | 成人午夜在线电影 | 久久精品一区二 | 国产伦精品一区二区三区… | 中文字幕一区二区三区在线视频 | 久久午夜精品视频 | 久久综合婷婷 | 国产精品中文字幕在线 | 日本aaaa级毛片在线看 | 日韩精品aaa | 成人蜜桃 | 日本aaa在线观看 | 99热这里只有精品久久 | 丝袜美腿在线播放 | 国产精品99久久99久久久二8 | 免费看的国产视频网站 | 超碰在线观看av.com | 久久一区二 | 天天综合狠狠精品 | av在线播放一区二区三区 | 狠狠的日日 | 日韩精品中文字幕久久臀 | 久久国产片| 国产玖玖在线 | a一片一级 | 色的网站在线观看 | 顶级bbw搡bbbb搡bbbb| 色综合在 | 久久免费视屏 | 国产精品一区二区在线播放 | 日韩91精品 | 国产美女在线精品免费观看 | 最近中文字幕免费观看 | 亚洲更新最快 | 日韩在线观看视频在线 | 久久久av电影 | 国产在线一卡 | 久99久中文字幕在线 | 国产精品资源网 | 玖玖爱免费视频 | 一本之道乱码区 | 日本不卡123区| 免费麻豆 | 久久久久久久久久久久久国产精品 | 日韩视频1区| 九九热久久久 | av在线超碰 | 九九精品无码 | 国产精品成人免费一区久久羞羞 | 欧美精品一区二区三区四区在线 | 国产精品毛片久久久久久 | 91视频com| 欧美在线观看视频免费 | 亚洲精品影视 | 国产在线观看网站 | 亚洲成人av在线播放 | 91在线中文 | 国产精品一区二区久久久 | 久久精品久久精品久久精品 | 国产伦理精品一区二区 | 久久久精品网站 | 天天干 天天摸 天天操 | 亚洲精品久久久蜜桃直播 | 国产精品福利无圣光在线一区 | 91爱爱免费观看 | 午夜视频亚洲 | 久久久久久久久久久久久影院 | 五月综合在线观看 | 精品国产一区二区三区在线观看 | 91在线91| 国产高清视频在线 | 999精品视频 | 激情五月网站 | 国产视频一区二区在线 | 激情在线网| 婷婷六月天在线 | 久久福利| 免费国产一区二区视频 | www.99热精品 | 激情久久伊人 | 中文字幕影片免费在线观看 | 午夜精品一区二区三区视频免费看 | 九九视频这里只有精品 | 久久精品国产亚洲精品2020 | av大全在线 | 午夜三级在线 | 日韩毛片在线一区二区毛片 | 成人app在线播放 | 91av精品 | 国产成人一区二区三区电影 | 国产一区二区三精品久久久无广告 | 欧美一级黄色片 | 日韩中出在线 | 精品久久精品 | 亚洲午夜激情网 | 欧美韩日精品 | 日韩高清在线不卡 | 乱男乱女www7788 | 精品久久久久久久久久久久久 | 在线观看完整版 | av免费看网站 | 在线观看av网 | 日韩高清国产精品 | 五月天激情婷婷 | 国产一区二区三区 在线 | 色网站黄 | 日韩xxxx视频 | 亚洲视屏在线播放 | 欧美a级在线 | 亚洲在线国产 | 亚洲国产剧情 | 亚洲成人中文在线 | 2022久久国产露脸精品国产 | 国产成人精品一区二区三区免费 | 色干干| 亚洲乱码精品久久久久 | 色婷婷伊人 | 国产精品a久久久久 | 黄色一级大片在线免费看产 | 国产在线91在线电影 | 日日操夜夜操狠狠操 | 韩国av免费观看 | 亚洲国产精品va在线看黑人动漫 | 国产精品久久嫩一区二区免费 | 国产69精品久久久久久久久久 | 在线www色| 免费h精品视频在线播放 | 中文字幕在线色 | 婷婷丁香色 | 色吊丝在线永久观看最新版本 | 在线播放 日韩专区 | 日韩在线观看电影 | 国外调教视频网站 | 亚洲精品乱码久久久久久蜜桃91 | 激情丁香久久 | 国产一区二区三区在线免费观看 | 色综合天天射 | 久久久久北条麻妃免费看 | 中国一级片在线观看 | 亚洲免费精品一区二区 | 69视频在线播放 | 亚洲高清视频在线观看免费 | 免费国产亚洲视频 | 中文字幕在线观看完整 | 精品一区二区日韩 | 又黄又爽又色无遮挡免费 | 丝袜av一区 | 国产成人精品一区二区三区福利 | 在线观看日韩精品视频 | 在线播放 亚洲 | 人人草人人草 | av电影在线观看完整版一区二区 | 亚洲成av人片 | 国产18精品乱码免费看 | 深爱婷婷网 | 国内精品久久久精品电影院 | а中文在线天堂 | 久久艹国产 | 成人黄色一级视频 | 久久字幕精品一区 | 国产精品一区二区在线播放 | 五月天天av | 综合婷婷| 色综合天天综合网国产成人网 | 一级国产视频 | 国产一区二区日本 | 在线黄色观看 | 午夜精品成人一区二区三区 | 国产精品系列在线播放 | 欧美污污网站 | 怡红院久久 | 亚洲观看黄色网 | 亚洲精品乱码久久久久久写真 | 久久精品久久99精品久久 | 久久久精品在线观看 | 五月开心六月婷婷 | 亚洲涩涩色 | 久久人人爽人人片 | 国产女人免费看a级丨片 | 国产区精品视频 | 福利视频网址 | 97精品国产91久久久久久 | 国产拍揄自揄精品视频麻豆 | 国产视频在线观看一区 | 亚洲第一av在线 | 在线三级播放 | 亚洲午夜精品一区二区三区电影院 | 欧美另类一二三四区 | 最新中文字幕在线资源 | av电影在线观看完整版一区二区 | 婷婷黄色片 | 国语精品久久 | 91亚色免费视频 | 欧美亚洲专区 | 在线播放国产精品 | 麻豆视频免费入口 | 成人免费网站在线观看 | av黄免费看 | 综合久久久久久久 | 欧美日韩另类视频 | 亚洲在线综合 | 2019国产精品 | 久久香蕉电影 | 婷婷丁香六月 | 天天爱天天操 | 国产中文字幕视频在线观看 | 在线观看黄色大片 | 一级α片 | 999国产| 久草在线费播放视频 | 国产永久免费高清在线观看视频 | 久久精品女人毛片国产 | 99热这里精品 | 中文字幕一区2区3区 | 成人午夜精品久久久久久久3d | 国产毛片久久 | 91大神在线看 | 久久综合影院 | 欧美日韩亚洲在线 | 精品久久久久久久久中文字幕 | 国产午夜精品视频 | 久影院 | 久久国内精品99久久6app | 精品福利在线观看 | 久草免费在线视频观看 | 欧美一区二区在线 | h文在线观看免费 | 亚洲成人在线免费 | ww视频在线观看 | 亚洲精品中文在线观看 | 五月婷婷综合在线观看 | 国产超碰在线观看 | 黄色毛片视频 | 国产一区二区免费 | 在线播放一区 | 中日韩免费视频 | 四虎在线免费观看 | 精品国产乱码久久 | 天天干,天天射,天天操,天天摸 | 久久久五月婷婷 | 精品国产一区二区三区蜜臀 | 久久成年视频 | 日韩欧美综合精品 | 91爱爱电影| 成人国产电影在线观看 | 69av视频在线观看 | 久久最新网址 | 91精品视屏 | 91刺激视频 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 中文字幕在线播放一区二区 | 精品久久精品久久 | 成人免费在线观看电影 | 字幕网资源站中文字幕 | 免费看片黄色 | 99色免费视频 | 国内视频 | 激情网五月天 | 免费亚洲视频 | 99自拍视频在线观看 | 免费观看日韩 | 99精品免费在线观看 | 婷婷亚洲激情 | 91视频在线观看免费 | 日韩在线短视频 | 日韩三级.com | 在线小视频国产 | 国产在线视频一区二区三区 | 毛片a级片| 97av在线视频免费播放 | 欧美日韩中文在线观看 | 丁香花在线视频观看免费 | 国产成人在线综合 | 最新极品jizzhd欧美 | 亚洲激情 | 午夜国产福利视频 | va视频在线 | 91高清免费在线观看 | 成人av观看| 国产精品麻豆视频 | 国产最新91 | 九色精品| 日日射av | 国产麻豆剧传媒免费观看 | 激情五月婷婷网 | 中文字幕在线观看网站 | 婷婷丁香视频 | 精品福利国产 | 国产日产精品一区二区三区四区 | 在线成人高清电影 | 999精品 | 国产成人久久77777精品 | 在线观看av小说 | 国产精品黑丝在线观看 | 久久久久久久久久久成人 | 天天操天天插 | 三级av中文字幕 | 免费三级骚 | 国产精品久久久久久久久久 | 91尤物国产尤物福利在线播放 | 激情av一区二区 | 免费在线观看av网址 | 国产精品欧美在线 | 国产麻豆精品一区二区 | 欧美性色网站 | 天天操天天干天天爱 | 欧美日韩国产区 | 99久久99久国产黄毛片 | 狠狠色噜噜狠狠狠合久 | 欧美日韩中文另类 | 国产在线97 | 91激情小视频 | 黄色三级在线观看 | 悠悠av资源片 | 国产亚洲永久域名 | av在线播放快速免费阴 | 亚洲aⅴ乱码精品成人区 | www.天天草| 超碰97国产| 日韩毛片久久久 | 久久久久国产精品www | www.色就是色 | 在线a亚洲视频播放在线观看 | 天天综合网在线观看 | 久久99国产精品 | 国产精品嫩草影视久久久 | 亚洲精品午夜久久久 | 人人草在线视频 | 99精品欧美一区二区三区黑人哦 | 免费在线激情视频 | 黄色福利视频网站 | 一区二区免费不卡在线 | 久久一区二区三区国产精品 | 久久精品123| 91在线国内视频 | 三级av免费| 久久久久高清毛片一级 | 欧美亚洲国产一卡 | 一本一道久久a久久综合蜜桃 | 午夜美女av | 人人干人人添 | 91在线视频观看免费 | 正在播放久久 | 国产精品激情在线观看 | 亚洲成a人片77777kkkk1在线观看 | 国产精品久久久久久久婷婷 | 久草在线最新视频 | 久久精品a | 蜜臀久久99精品久久久无需会员 | 久久久久国产成人免费精品免费 | 欧美日韩在线视频一区二区 | 一区二区三区在线观看 | 婷婷伊人五月天 | 99精品视频观看 | 视频一区在线免费观看 | 99久久99久久精品免费 | 在线视频观看你懂的 | 日韩免费小视频 | 日本中文字幕在线电影 | 天天操网站 | 国产免费观看久久黄 | 久99久视频| 日日夜夜天天综合 | 国产精品18久久久久久不卡孕妇 | 久草在线视频国产 | 亚洲精品mv在线观看 | 97超碰色偷偷 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 在线观看mv的中文字幕网站 | 91麻豆精品91久久久久同性 | 在线观看中文字幕一区 | 亚洲无吗av | 国产精品视频免费观看 | 国产精品a成v人在线播放 | 国产在线色| 国产精品久久久久久久久久久不卡 | 色网站免费在线观看 | 99热这里 | 天堂av观看 | 91精品综合| 91视频免费视频 | 91成年人网站 | 欧美日韩精品免费观看视频 | 国产一区自拍视频 | 成人香蕉视频 | 香蕉成人在线视频 | 九9热这里真品2 | 91精品国产麻豆国产自产影视 | 欧美日韩一区三区 | 91一区啪爱嗯打偷拍欧美 | 国产 欧美 日产久久 | 日韩精品一区二区三区不卡 | 日韩天天操 | 高清国产在线一区 | 亚洲日本欧美在线 | 96亚洲精品久久 | 久久99精品国产91久久来源 | 五月激情丁香图片 | 久久99国产精品免费网站 | 国产黄色播放 | 五月天婷亚洲天综合网鲁鲁鲁 | 激情久久久久久久久久久久久久久久 | 日韩一区二区久久 | 成人四虎影院 | 国产亚洲成人网 | 日韩一级电影在线观看 | 亚洲2019精品 | 久久视频在线观看中文字幕 | 国产精品视频永久免费播放 | 综合久久精品 | 欧美一级久久久 | 国产成人精品一区二区三区网站观看 | 国产一级片免费播放 | 久久a久久| 久久久久久久久久久福利 | 国产91精品看黄网站在线观看动漫 | 国产精品第72页 | 国产在线不卡精品 | 亚洲欧美在线综合 | 免费观看一区二区 | 欧美 激情 国产 91 在线 | 亚洲精品在线网站 | 最新国产在线观看 | av电影在线不卡 | 日本在线中文在线 | 91成人免费电影 | 国产91免费在线 | 四虎在线永久免费观看 | 久久不射电影院 | 成人免费观看网站 | 色婷婷视频在线 | 99爱在线观看 | 欧美日本在线观看视频 | 欧美视频www| 亚洲不卡123 | 欧美久久久久久久久久久久 | 久久免费成人 | 中文字幕第一页在线视频 | 国产精品av一区二区 | 国产在线2020 | 97在线观看免费高清完整版在线观看 | 成年人免费av| 超碰97国产在线 | 国产一二三在线视频 | 91视频传媒 | 久草在线资源观看 | 免费又黄又爽的视频 | 色久av | 亚洲精品成人av在线 | 丝袜美女在线观看 | av免费成人 | 亚洲理论在线 | 精品国产免费人成在线观看 | 五月婷婷在线视频观看 | 欧美日韩二区在线 | 国产涩图 | 国产伦精品一区二区三区无广告 | 91麻豆福利 | 黄色的视频 | 久久福利 | 中文字幕日韩电影 | 国产高清在线永久 | 日本三级久久 | 夜夜视频资源 | 欧美色图视频一区 | 91丨九色丨国产在线观看 | 亚洲另类视频在线观看 | 日韩欧美精品在线 | 91人人澡| 日本三级香港三级人妇99 | 99视频| 成年人av在线播放 | 99视频精品视频高清免费 | 色播五月激情五月 | 日韩在线免费不卡 | 国产成人亚洲在线观看 | 久久毛片网站 | 色综合中文综合网 | 免费不卡中文字幕视频 | 99精品国产99久久久久久97 | 国产午夜精品理论片在线 | 欧美日韩在线精品一区二区 | 超碰九九 | 欧美综合在线视频 | 狠狠艹夜夜干 | 精品视频成人 | 成人av高清在线观看 | 亚洲第一久久久 | 国产欧美精品xxxx另类 | 麻豆手机在线 | 在线电影av| 欧美坐爱视频 | 亚洲精品网页 | 91系列在线 | 亚洲精品在线网站 | 国产字幕在线观看 | 久草在线播放视频 | 在线观看一区视频 | 98精品国产自产在线观看 | 欧美成人黄色片 | 日本在线h | 久久免费精品国产 | 国产视频不卡 | 超碰国产在线观看 | av大全免费在线观看 | 久久99影院 | 成人av一区二区兰花在线播放 | www.com.日本一级 | 久久人人爽人人人人片 | 国外调教视频网站 | 又黄又爽免费视频 | 黄色avwww| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久久久国产成人精品亚洲午夜 | 国产精彩视频 | 中文字幕视频免费观看 | 久久精品韩国 | 精品久久久久久亚洲综合网站 | 伊人久久国产 | 欧美一级黄色网 | 91丝袜美腿 | 亚洲精品黄色在线观看 | 成年人免费看的视频 | 免费观看日韩av | 91精品国产成 | 欧美一级片 | 蜜桃视频在线视频 | 奇米导航 | 国产精品久久久一区二区 | 国产精品久久久久亚洲影视 | 一级a毛片高清视频 | 人人艹视频| 久久撸在线视频 | 五月婷婷六月丁香 | 一区二区三区高清在线 | 日韩av不卡在线播放 | 99精品乱码国产在线观看 | 国产精品久久久久久婷婷天堂 | 国产精品自产拍在线观看中文 | 久久国产一区二区三区 | 91av视频在线观看免费 | 在线视频久久 | 99精品国产一区二区三区不卡 | 久久a免费视频 | 免费视频 你懂的 | 天天综合网久久 | 在线观看91精品视频 | avove黑丝 | 91丨九色丨高潮 | 日韩在线视频二区 | 色视频 在线 | 中文字幕在线久一本久 | 欧美一区在线看 | 日韩视频中文字幕在线观看 | 麻豆视频国产精品 | 久久免费视频2 | 国产成人一区二区三区久久精品 | 欧美十八| 久久天天草| 久久久久久国产精品 | 亚洲精品免费在线播放 | 欧美日韩精品在线观看视频 | 国产精品激情偷乱一区二区∴ | 精品国产一二区 | 久久一精品| av不卡中文字幕 | 日韩欧美国产激情在线播放 | 欧美激情精品久久久久久免费 | 中文永久字幕 | 婷婷色网视频在线播放 | 性日韩欧美在线视频 | 干干日日 | 在线免费观看视频你懂的 | 色婷婷激情网 | 福利一区二区三区四区 | 欧美久草网 | 一区 在线 影院 | 久久国产精品成人免费浪潮 | www四虎影院 | 在线一区电影 | a级国产乱理伦片在线观看 亚洲3级 | 国产手机在线精品 | 9999亚洲| 亚洲黄色免费 | 国产永久网站 | 我要色综合天天 | 久久首页| 免费在线观看黄色网 | 国产精品视频在线看 | 国产视频 亚洲精品 | av+在线播放在线播放 | 免费a视频在线观看 | 天天操天天摸天天爽 | 成人久久18免费网站图片 | 久久精品欧美一区 | 天堂在线视频中文网 | 亚洲一级性 | 色国产视频 | 在线观看av网 | 免费观看完整版无人区 | 国产成人精品电影久久久 | 97在线视频免费看 | 色婷婷综合久久久久中文字幕1 | 粉嫩av一区二区三区四区 | 97人人添人澡人人爽超碰动图 | 亚洲丝袜一区 | 国产精品精品 | 免费av网址在线观看 | 国产青草视频在线观看 | 在线观看黄色 | 波多野结衣在线播放一区 | 精品国产电影一区 | 久久久www成人免费毛片 | 日韩91在线 | www.色午夜,com| 久久三级毛片 | 天天做天天爱天天爽综合网 | 又污又黄网站 | 91精品久久久久久综合乱菊 | 精品免费一区二区三区 | 欧美性粗大hdvideo | 高清免费在线视频 | 婷婷六月天丁香 | 91正在播放 | 久久久影院官网 | 日韩av三区| 久草视频在线资源站 | 在线观看蜜桃视频 | 伊人官网 | 日日夜夜骑 | 国产亚洲欧美精品久久久久久 | 在线观看中文字幕一区 | 999国内精品永久免费视频 | 国产高清不卡一区二区三区 | 久久久久国产免费免费 | 日韩综合一区二区 | 久久97超碰| 久草在线视频网 | 91中文字幕在线视频 | 97天堂网 | 国产裸体bbb视频 | 91成人网在线观看 | 久久国产区| 精品毛片一区二区免费看 | 插综合网 | 伊人天天色 | 亚州国产精品视频 | 国产精品久久一区二区三区不卡 | 欧美亚洲成人免费 | a在线视频v视频 | 久久精品9 | 人人精久 | ww亚洲ww亚在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲精品视频大全 | 久久久亚洲麻豆日韩精品一区三区 | 成人a视频在线观看 | 天天色 天天 | 美女福利视频 | 97香蕉久久国产在线观看 | 日韩免费小视频 | 最近中文字幕完整高清 | 天天插天天 | 久久新| 日韩在线一区二区免费 | 免费人成在线观看 | 在线观看中文字幕网站 | 日本黄色a级大片 | 中文在线a∨在线 | 最近中文字幕视频网 | 一本一道久久a久久精品蜜桃 | 免费中文字幕在线观看 | 精品久久视频 | 国产1级毛片 | 国产黄色片一级三级 | 中文字幕在线国产精品 | 91亚洲精品国偷拍 | 欧美国产日韩一区二区三区 | 亚洲综合视频在线观看 | 81国产精品久久久久久久久久 | 亚洲国产中文在线 | 西西4444www大胆视频 | 成人国产精品av | 亚洲成色| 手机看片久久 | 午夜av片 | 久草在线观看 | 日本久久久精品视频 | 久久精品国产v日韩v亚洲 | 天天操天天干天天操天天干 | 日本久久综合网 | 久久999精品 | 99久热精品 | 久久久国际精品 | 国产精品久久久久久电影 | 日韩欧美一区二区在线播放 | 免费97视频 | 成人理论在线观看 | 亚洲成av人影院 | 一区二区三区高清在线观看 | 狠狠插狠狠干 | 久热av在线 | 国产婷婷vvvv激情久 | 久久国产午夜精品理论片最新版本 | 国产免费视频一区二区裸体 | 午夜av影院 | 99久久国产免费,99久久国产免费大片 | 亚洲精品玖玖玖av在线看 | 国产精品久久久久久久午夜 | 午夜视频在线观看一区二区三区 | 有码中文在线 | 日韩在线观看 | 国产在线资源 | 日本婷婷色 | 欧美日韩国产一区二区三区在线观看 | 91精品国产自产在线观看 | 国产黄色片免费 | 国产99一区视频免费 | 日韩欧美视频二区 | 中文字幕 国产 一区 | 国产亲近乱来精品 | 99精品免费在线 | 91丨九色丨国产在线观看 | 色综合激情网 | 久久成熟 | 在线观看免费福利 | 中文字幕在线观看一区 | 狠狠狠色丁香综合久久天下网 | 国产一区二区三区免费观看视频 | 国产涩涩网站 | 91最新国产 | 久久伦理电影网 | 天天综合网天天综合色 | 狠狠狠色丁香婷婷综合激情 | 久久久久久久国产精品视频 | 狠狠狠色丁香综合久久天下网 | 午夜精品剧场 | 欧美,日韩 | 在线观看视频97 | av解说在线观看 | 国产玖玖精品视频 | 亚洲精品观看 | 中文字幕韩在线第一页 | 蜜臀久久99精品久久久无需会员 | 免费在线播放av电影 | 婷婷精品国产欧美精品亚洲人人爽 | 一区二区三区日韩视频在线观看 | 久久激情综合网 | 久久精品99国产精品酒店日本 | 免费黄av | 国产精品久久久久久超碰 | av电影av在线 | 国产色婷婷精品综合在线手机播放 | 国产精品系列在线播放 | 国模视频一区二区三区 | 精品国产一区二区三区四区在线观看 | 婷婷色狠狠 | 免费视频91 | 日韩欧美一区二区三区免费观看 | 日韩网站免费观看 | 国产精品1区2区3区 久久免费视频7 | 人人cao | 久久国产精品一区二区三区四区 | 久草在线视频网站 | 国产精品美女久久久久久网站 | 久久a级片 | 在线观看视频黄色 | 久久精品国产精品亚洲 | 久草视频免费在线播放 | 激情五月在线 | 中文字幕视频在线播放 | 亚洲激情在线观看 | 日韩色综合| 成人久久毛片 | 国产精品久久三 | 色人久久| 91亚洲在线 | 99视频在线精品 | 国产美女精品久久久 | 国产91亚洲| 中文字幕在线看片 | 综合色久 | 亚洲最快最全在线视频 | 中文字幕精品在线 | 欧美一区二区在线免费观看 | 国产亚洲精品女人久久久久久 | 国产精品久久久久久久久久 | 国产精品乱码久久久久久1区2区 | 国产精品99久久久久 | 911香蕉视频 | 国产黄色特级片 | 日夜夜精品视频 | 超碰在线94 | 97超碰人人看| 色综合久久天天 | 2021久久| 中文字幕在线视频精品 | 国产精品www | 国产福利一区二区三区视频 | 国产一级三级 | 天天舔天天射天天操 | 999成人国产 | 丁香九月婷婷综合 | 91精品国产一区二区在线观看 | 在线电影日韩 | 精品一二区 | 狠狠色丁香久久婷婷综合丁香 | 一区二区久久久久 | 日本99干网 | av成人免费在线观看 | 欧美激情精品久久久久久免费印度 | 国产一区二区在线播放 | 视频在线观看91 | 天天操夜夜逼 | 国产午夜精品视频 | 免费看一级特黄a大片 | 97电院网手机版 | 欧美成年黄网站色视频 | 亚洲精品视频大全 | 免费观看一级成人毛片 | 91精品视频免费观看 | 三级av在线 | 九九综合久久 | 天干啦夜天干天干在线线 | 免费高清在线观看成人 | 亚洲人片在线观看 | 天天草天天干天天射 | 中文字幕在线播放一区 | 手机在线小视频 | 插综合网| 91免费在线 | 久久久久久视频 | 久久97久久97精品免视看 | 在线观看色网 | 欧美午夜理伦三级在线观看 | 91资源在线 | 久久久久www | 精品一区二区三区久久 | 超碰在线成人 | 国产乱视频 | 亚洲五月六月 | 亚洲国产精品va在线看黑人动漫 | 久久99久久99精品中文字幕 | 亚洲欧美激情精品一区二区 | 国产精品久久三 | 国产黄色一级大片 | 亚洲成人免费 | 91久久影院| 亚洲精品国产欧美在线观看 | 一区二区三区精品在线 | 最近2019中文免费高清视频观看www99 | 国产成人区 | 91精品视频在线免费观看 | 国产v在线 | 亚洲电影黄色 | 国产精品视频最多的网站 | 天天看天天干天天操 | 93久久精品日日躁夜夜躁欧美 | 日韩网 | 久热只有精品 | 亚洲精品视频网站在线观看 | 日韩一区二区久久 | 超碰久热 | 久久精品a | 2024av在线播放 | 国产视频在线观看一区 | 国产亚洲精品中文字幕 | 国产精品免费在线播放 | 黄毛片在线观看 | 在线观看av黄色 | 四虎影视精品成人 | 91精品成人 | 色网免费观看 | 在线观看福利网站 | 久久精品久久久久久久 | 丁香六月国产 | 五月天堂网 | 欧美日韩精品免费观看视频 | 亚洲激情综合网 | 久久激情婷婷 | 免费看片网站91 | 中文在线资源 | 亚洲精品久久久蜜桃直播 | 激情欧美一区二区免费视频 | 亚洲精品av中文字幕在线在线 | 久久夜色精品国产欧美一区麻豆 | 91在线精品秘密一区二区 | 国产美腿白丝袜足在线av | 97av在线视频免费播放 | 国产一区二区免费 | 国产精品美女毛片真酒店 | 国产一卡久久电影永久 | 亚洲一区欧美激情 | 在线免费国产视频 | 可以免费看av | 日韩黄色免费看 | 伊人日日干 | 日韩精品一区二区三区在线播放 | 久久新| 亚色视频在线观看 | 婷婷丁香在线 | 精品国产乱码久久久久久久 | 日韩av看片 | 成年人视频免费在线播放 | 亚洲国产999| 日日躁天天躁 | 99久e精品热线免费 99国产精品久久久久久久久久 | 91视频久久久 | 77国产精品 | 成人久久电影 | 国产一区二区久久久久 | 91刺激视频 | 国产aa免费视频 | 国产在线视频一区二区三区 | 免费国产亚洲视频 | 九精品| 日韩一区二区三区高清在线观看 | 国产亚洲一区二区三区 | 欧洲性视频 | 欧美久久成人 | 91chinesexxx | 国产精品一区二区中文字幕 | 成年人免费看片 | 国产精品久久久久久久妇 | 男女免费视频观看 | 97精品国产一二三产区 | 九九热在线精品 | 国产麻豆精品一区 | a级片网站| 日日夜夜噜噜噜 | 亚洲第二色 | 91看片黄色| 国产成人a亚洲精品v | 碰超在线97人人 | 国内精品二区 | 亚洲九九九在线观看 | 国产美女在线精品免费观看 | 最近免费中文字幕大全高清10 | 成人xxxx | 在线视频中文字幕一区 | 国产中文字幕一区二区 | 成人av电影在线播放 | www麻豆视频 | 亚洲日本精品视频 | 一区二区三区四区免费视频 | 激情开心站 | 天天射射天天 | 91亚洲精品久久久蜜桃借种 | 亚洲做受高潮欧美裸体 | 精品久久久久国产 | 国产视频亚洲精品 | 欧美三人交| 992tv在线观看网站 | 亚洲电影第一页av |