日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

深入探討TypeScript中implements與extends的區別

來源: 責編: 時間:2024-01-24 09:01:47 288觀看
導讀在 TypeScript 中,我們經常會遇到兩個關鍵字,即 implements 和 extends。雖然它們在代碼中看起來相似,但它們實際上有著不同的作用和用法。本文將深入探討這兩個關鍵字之間的區別,幫助讀者更好地理解它們在 TypeScript 中

在 TypeScript 中,我們經常會遇到兩個關鍵字,即 implements 和 extends。雖然它們在代碼中看起來相似,但它們實際上有著不同的作用和用法。本文將深入探討這兩個關鍵字之間的區別,幫助讀者更好地理解它們在 TypeScript 中的應用。wge28資訊網——每日最新資訊28at.com

class和interface的區別

要理解extends和implements的區別,得對類和接口的概念熟稔于心,它們在語法和用途上的關鍵區別。wge28資訊網——每日最新資訊28at.com

記住:wge28資訊網——每日最新資訊28at.com

  • 類是創建對象的模板,支持封裝、繼承和多態。
  • 接口是描述對象形狀的抽象結構,用于確保對象符合特定的規范。

類是一種具有屬性和方法的藍圖,它用于創建對象。通過類,可以實例化對象,讓多個對象共享相同的結構和行為。類支持封裝、繼承和多態等面向對象的特性。wge28資訊網——每日最新資訊28at.com

class Person {    name: string;    constructor(name: string) {        this.name = name;    }    sayHello() {        console.log(`Hello, my name is ${this.name}.`);    }}const person = new Person("John");person.sayHello();

用途:wge28資訊網——每日最新資訊28at.com

  • 用于創建對象和實現面向對象的編程范式。
  • 支持封裝,可以隱藏對象的內部實現細節。
  • 支持繼承,通過繼承可以重用已有的類的屬性和方法。
  • 支持多態,可以使用相同的接口調用不同的實現。

在typescript中類時有抽象類和非抽象類之分的,是面向對象編程中兩種不同的類的概念,主要區別在于類的設計和用途。wge28資訊網——每日最新資訊28at.com

抽象類

抽象類是一種不能被實例化的類,用于定義對象的通用結構和行為。抽象類可以包含抽象方法(沒有具體實現的方法)和具體方法(有實際實現的方法)。wge28資訊網——每日最新資訊28at.com

特點:wge28資訊網——每日最新資訊28at.com

  • 抽象類不能被直接實例化,即不能使用 new 關鍵字創建抽象類的實例。抽象類主要用于作為其他類的基類,提供通用的屬性和方法的框架,但不能獨立存在。
  • 抽象類中可以包含抽象方法,這些方法沒有具體的實現,而是要求子類必須提供具體的實現。抽象方法使用 abstract 關鍵字標記。
  • 抽象類可以被其他類繼承,子類必須實現抽象類中的所有抽象方法,否則子類也必須聲明為抽象類。
abstract class Shape {    abstract draw(): void; // 抽象方法    area() {        console.log("Calculating area...");    }}class Circle extends Shape {    draw() {        console.log("Drawing a circle");    }}

非抽象類

非抽象類是可以被實例化的類,它可以包含屬性、方法,以及具體的實現。非抽象類通常用于創建可以直接實例化和使用的對象。wge28資訊網——每日最新資訊28at.com

特點:wge28資訊網——每日最新資訊28at.com

  • 可以被實例化:非抽象類可以被直接實例化,使用 new 關鍵字可以創建非抽象類的對象。
  • 具體方法:非抽象類中可以包含具體的方法實現,而不僅限于抽象方法。這些方法可以被繼承或直接調用。
  • 繼承:非抽象類可以被其他類繼承,子類可以選擇性地覆蓋或擴展父類中的方法。
class Animal {    name: string;    constructor(name: string) {        this.name = name;    }    makeSound() {        console.log("Some generic sound");    }}class Dog extends Animal {    makeSound() {        console.log("Woof! Woof!");    }}

抽象類和非抽象類的區別

抽象類:wge28資訊網——每日最新資訊28at.com

  • 不能被直接實例化。
  • 可以包含抽象方法和具體方法。
  • 用于提供類的基本框架,強制子類實現特定行為。

非抽象類:wge28資訊網——每日最新資訊28at.com

  • 可以被直接實例化。
  • 可以包含屬性、方法,以及具體的實現。
  • 子類可以選擇性地覆蓋或擴展父類的方法。

接口

接口是一種用于描述對象形狀(即屬性和方法)的抽象結構。接口并沒有提供具體的實現,而是定義了一組規范,用于確保符合該接口的對象具有特定的結構。wge28資訊網——每日最新資訊28at.com

interface Person {    name: string;    sayHello(): void;}const person: Person = {    name: "John",    sayHello() {        console.log(`Hello, my name is ${this.name}.`);    }};person.sayHello();

用途:wge28資訊網——每日最新資訊28at.com

  • 用于描述對象的形狀,確保對象具有特定的結構。
  • 支持通過接口來定義類的契約,使得類必須實現特定的屬性和方法。
  • 支持通過接口來組合多個對象的結構,從而實現靈活的代碼組織。

extends關鍵字

extends 關鍵字主要用于創建類或接口的繼承關系。通過 extends,一個類或接口可以繼承另一個類或接口的屬性和方法,從而可以重用已有的代碼并擴展其功能。不可以重寫屬性,但是可以重寫方法。wge28資訊網——每日最新資訊28at.com

類繼承類

非抽象類繼承非抽象類

非抽象類繼承非抽象類即簡單的屬性和方法的繼承。wge28資訊網——每日最新資訊28at.com

當一個非抽象類繼承另一個非抽象類時,子類會繼承父類的屬性和方法,并且子類可以選擇性地覆蓋或擴展父類的方法。wge28資訊網——每日最新資訊28at.com

// 父類class Animal {    name: string;    constructor(name: string) {        this.name = name;    }    makeSound() {        console.log("Some generic sound");    }}// 子類繼承父類class Dog extends Animal {    // 可以覆蓋父類的方法    makeSound() {        console.log("Woof! Woof!");    }    // 可以擴展父類的方法    greetOwner() {        console.log(`Hello, owner! My name is ${this.name}.`);    }}

非抽象類繼承抽象類

當一個非抽象類繼承抽象類時,子類必須提供抽象類中定義的抽象方法的具體實現。抽象類中的抽象方法是沒有具體實現的方法,而是由子類去實現。這強制了子類必須遵循抽象類中定義的一些行為規范。wge28資訊網——每日最新資訊28at.com

// 抽象類abstract class Shape {    abstract draw(): void; // 抽象方法    area() {        console.log("Calculating area...");    }}// 非抽象類繼承抽象類class Circle extends Shape {    radius: number;    constructor(radius: number) {        super(); // 調用父類的構造函數        this.radius = radius;    }    // 實現抽象方法    draw() {        console.log("Drawing a circle");    }    // 可以擴展父類的方法    calculateArea() {        const area = Math.PI * this.radius ** 2;        console.log(`Area: ${area}`);    }}

抽象類繼承抽象類

抽象類可以繼承非抽象類的屬性和方法,而且它也可以包含抽象方法,這些抽象方法需要在子類中進行實現。wge28資訊網——每日最新資訊28at.com

// 非抽象類class Animal {    name: string;    constructor(name: string) {        this.name = name;    }    makeSound() {        console.log("Some generic sound");    }}// 抽象類繼承非抽象類abstract class Dog extends Animal {    abstract wagTail(): void; // 抽象方法    bark() {        console.log("Woof! Woof!");    }}// 具體的子類實現抽象類中的抽象方法class Labrador extends Dog {    wagTail() {        console.log("Tail wagging...");    }}

抽象類繼承抽象類

抽象類是可以繼承抽象類的。這種繼承關系允許在類的層次結構中建立一種更高層次的抽象,并要求子類實現更具體的行為。wge28資訊網——每日最新資訊28at.com

// 抽象類abstract class Animal {    abstract makeSound(): void; // 抽象方法    move() {        console.log("Animal is moving...");    }}// 另一個抽象類繼承抽象類abstract class Bird extends Animal {    abstract fly(): void; // 抽象方法    chirp() {        console.log("Chirp chirp!");    }}// 具體的子類實現抽象類中的抽象方法class Sparrow extends Bird {    makeSound() {        console.log("Sparrow is making sound");    }    fly() {        console.log("Sparrow is flying");    }}

類繼承接口

類是無法直接使用extends繼承接口的,只能使用implements去實現接口。wge28資訊網——每日最新資訊28at.com

接口繼承類

接口是不能直接繼承類的。wge28資訊網——每日最新資訊28at.com

類可以作為接口的一部分,從而實現接口繼承類。這意味著你可以定義一個接口,它包含了類的實例部分的成員,然后其他類可以實現這個接口。wge28資訊網——每日最新資訊28at.com

這樣的話,實際上是在強調類的實例結構。wge28資訊網——每日最新資訊28at.com

abstract class AbstractParent {    abstract abstractFunc():string} // 接口繼承類interface IExample extends AbstractParent{    name:string    age:number}

需要注意的是,這種方式強調的是類的實例結構,而不是類的構造函數或靜態部分。因此,只有類的實例部分的成員才會被包含在接口中。wge28資訊網——每日最新資訊28at.com

接口繼承接口

接口可以通過 extends 關鍵字來繼承其他接口,從而形成接口繼承接口的關系。wge28資訊網——每日最新資訊28at.com

// 定義一個基礎接口interface Shape {  color: string;}// 定義繼承自 Shape 接口的新接口interface Square extends Shape {  sideLength: number;}// 使用新接口let square: Square = {  color: "red",  sideLength: 10,};

小結

  • 非抽象類繼承非抽象類:

簡單的屬性和方法的繼承。wge28資訊網——每日最新資訊28at.com

子類繼承父類的屬性和方法,可以選擇性地覆蓋或擴展父類的方法。wge28資訊網——每日最新資訊28at.com

  • 非抽象類繼承抽象類:
  • 子類需要實現抽象類中定義的抽象方法。
  • 對于屬性,非抽象類可以直接繼承,無需單獨定義。
  • 抽象類繼承非抽象類:
  • 簡單的屬性和方法的繼承。
  • 子類繼承父類的屬性和方法。
  • 抽象類繼承抽象類:
  • 子類繼承父類的屬性和方法。
  • 子類必須提供抽象類中定義的抽象方法的具體實現。
  • 類繼承接口:
  • 類無法直接使用 extends 繼承接口,只能使用 implements 去實現接口。
  • 接口繼承類:
  • 接口不能直接繼承類。
  • 類可以作為接口的一部分,實現接口繼承類,強調類的實例結構。
  • 接口繼承接口:
  • 簡單的屬性和方法的繼承。
  • 接口可以通過 extends 關鍵字繼承其他接口。

implements關鍵字

implements 關鍵字來確保一個類實現了特定的接口。接口定義了一組成員(方法、屬性等),而通過 implements,你可以告訴 TypeScript 編譯器,這個類將提供接口中指定的所有成員。wge28資訊網——每日最新資訊28at.com

類實現類

非抽象類實現非抽象類

實現類里面所有的屬性和方法都要在目標類里重新定義和實現。wge28資訊網——每日最新資訊28at.com

// 定義一個非抽象類class MyBaseClass {    baseMethod(): void {        console.log("Base class method");    }}// 定義另一個非抽象類并實現 MyBaseClassclass MyDerivedClass implements MyBaseClass {    baseMethod(): void {        console.log("Derived class method");    }    derivedMethod(): void {        console.log("Derived class-specific method");    }}

非抽象類實現抽象類

抽象類里的所有屬性和方法都需要在非抽象類里定義和實現。wge28資訊網——每日最新資訊28at.com

// 定義一個抽象類abstract class MyAbstractClass {    abstract abstractMethod(): void;}// 定義一個非抽象類并實現抽象類class MyNonAbstractClass implements MyAbstractClass {    abstractMethod(): void {        console.log("Implementation of abstractMethod");    }    nonAbstractMethod(): void {        console.log("Non-abstract class-specific method");    }}

抽象類實現抽象類

實現類里面所有的屬性都要在目標類里重新定義,所有方法需要被實現或者使用 abstract 定義為抽象方法。wge28資訊網——每日最新資訊28at.com

// 定義一個抽象類abstract class BaseAbstractClass {    abstract abstractMethod(): void;    abstract abstractProperty: string;}// 另一個抽象類繼承自 BaseAbstractClassabstract class DerivedAbstractClass extends BaseAbstractClass {    // 重新定義屬性    abstract abstractProperty: string;    concreteProperty: number = 42;    // 實現抽象方法    abstractMethod(): void {        console.log("Implementation of abstractMethod in DerivedAbstractClass");    }    // 新的抽象方法    abstract newAbstractMethod(): void;}// 具體的實現類class ConcreteClass extends DerivedAbstractClass {    // 重新定義屬性    abstractProperty: string = "Concrete Property";    // 實現新的抽象方法    newAbstractMethod(): void {        console.log("Implementation of newAbstractMethod in ConcreteClass");    }    // 新的具體方法    concreteMethod(): void {        console.log("Concrete method in ConcreteClass");    }}

抽象類實現非抽象類

非抽象類里面所有的屬性都要在抽象類里重新定義,所有方法需要被實現或者使用 abstract 定義為抽象方法。wge28資訊網——每日最新資訊28at.com

// 定義一個非抽象類class MyBaseClass {    nonAbstractProperty: string = "Non-abstract Property";    nonAbstractMethod(): void {        console.log("Non-abstract method in MyBaseClass");    }}// 抽象類繼承自非抽象類abstract class MyAbstractClass extends MyBaseClass {    // 重新定義屬性    abstract nonAbstractProperty: string;    // 實現非抽象方法    nonAbstractMethod(): void {        console.log("Implementation of nonAbstractMethod in MyAbstractClass");    }    // 新的抽象方法    abstract newAbstractMethod(): void;}// 具體的實現類class ConcreteClass extends MyAbstractClass {    // 重新定義屬性    nonAbstractProperty: string = "Concrete Property";    // 實現新的抽象方法    newAbstractMethod(): void {        console.log("Implementation of newAbstractMethod in ConcreteClass");    }    // 新的具體方法    concreteMethod(): void {        console.log("Concrete method in ConcreteClass");    }}

類實現接口

抽象類實現接口

接口所有屬性都要重新定義,接口所有方法需要實現或者使用 abstract 定義為抽象方法。wge28資訊網——每日最新資訊28at.com

// 定義一個接口interface MyInterface {    interfaceProperty: string;    interfaceMethod(): void;}// 抽象類實現接口abstract class MyAbstractClass implements MyInterface {    // 重新定義接口中的屬性    interfaceProperty: string;    // 實現接口中的方法    interfaceMethod(): void {        console.log("Implementation of interfaceMethod in MyAbstractClass");    }    // 新的抽象方法    abstract newAbstractMethod(): void;}// 具體的實現類class ConcreteClass extends MyAbstractClass {    // 重新定義屬性    interfaceProperty: string = "Concrete Property";    // 實現新的抽象方法    newAbstractMethod(): void {        console.log("Implementation of newAbstractMethod in ConcreteClass");    }    // 新的具體方法    concreteMethod(): void {        console.log("Concrete method in ConcreteClass");    }}

非抽象類實現接口

接口所有屬性都要重新定義,接口所有方法需要實現。wge28資訊網——每日最新資訊28at.com

// 定義一個接口interface MyInterface {    interfaceProperty: string;    interfaceMethod(): void;}// 非抽象類實現接口class MyClass implements MyInterface {    // 重新定義接口中的屬性    interfaceProperty: string = "Default Property";    // 實現接口中的方法    interfaceMethod(): void {        console.log("Implementation of interfaceMethod in MyClass");    }    // 新的具體方法    myClassMethod(): void {        console.log("Method specific to MyClass");    }}

接口不能實現接口

接口不能實現類

小結

  • 類實現類

非抽象類實現非抽象類:實現類里面所有的屬性和方法都要在目標類里重新定義和實現wge28資訊網——每日最新資訊28at.com

非抽象類實現抽象類:抽象類里的所有屬性和方法都需要在非抽象類里定義和實現wge28資訊網——每日最新資訊28at.com

抽象類實現抽象類:實現類里面所有的屬性都要在目標類里重新定義,所有方法需要被實現或者使用 abstract 定義為抽象方法wge28資訊網——每日最新資訊28at.com

抽象類實現非抽象類:非抽象類里面所有的屬性都要在抽象類里重新定義,所有方法需要被實現或者使用 abstract 定義為抽象方法wge28資訊網——每日最新資訊28at.com

  • 類實現接口
  • 抽象類實現接口:接口所有屬性都要重新定義,接口所有方法需要實現或者使用 abstract 定義為抽象方法
  • 非抽象類實現接口:接口所有屬性都要重新定義,接口所有方法需要實現
  • 接口實現接口:接口不能實現接口
  • 接口實現類:接口不能實現類

extends和implements的區別

通過前文的介紹,相信你已經能夠清晰地區分這兩者了。在本節中,我將對以上內容進行總結。首先,我們列舉它們的共同點:wge28資訊網——每日最新資訊28at.com

  • 都可以建立類與類之間的關聯。
  • 針對抽象類中的抽象方法,都必須要進行實現。

接下來,我們詳細列舉它們的不同之處:wge28資訊網——每日最新資訊28at.com

  • extends能夠實現接口與接口、接口與類的繼承;而implements不能實現接口與接口、接口與類的實現。
  • implements可以實現類實現接口,而extends不能實現類繼承接口。
  • 在使用implements時,必須定義或實現所有屬性和方法;而extends只需重新定義或實現方法,對于屬性來說,可以直接繼承,無需單獨定義。

總結

extends 用于建立類與類之間的繼承關系,而 implements 用于確保類實現了特定的接口。 extends 在類的層次結構中用于繼承,而 implements 則用于實現接口的規范。wge28資訊網——每日最新資訊28at.com

參考文章

  • https://juejin.cn/post/7062945752380604447
  • https://juejin.cn/post/6914213447169376263
  • https://juejin.cn/post/7023774750073683976
  • https://www.typescriptlang.org/docs/handbook/2/classes.html#abstract-classes-and-members

本文鏈接:http://m.www897cc.com/showinfo-26-66961-0.html深入探討TypeScript中implements與extends的區別

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 什么?Figma 的 Fig 文件格式居然解析出來了

下一篇: Python中最常用的十個內置函數!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲成人中文| 国产精品久久久99| 久久久av毛片精品| 久久青草福利网站| 欧美激情一区二区三区| 欧美日韩在线一区二区三区| 国产精品性做久久久久久| 国产一区二区三区网站| 亚洲日本激情| 亚洲欧美日韩一区二区| 免费看精品久久片| 欧美三级乱码| 精品999日本| 一二三区精品福利视频| 久久国产精品久久久久久电车| 欧美第十八页| 国产喷白浆一区二区三区| 91久久精品国产91性色| 亚洲一区一卡| 免费视频一区| 国产免费观看久久黄| 亚洲国产精品v| 午夜精品久久久久影视| 欧美大片在线观看| 国产目拍亚洲精品99久久精品| 亚洲国产99| 亚洲欧美另类中文字幕| 欧美大秀在线观看| 国内成人在线| 亚洲一区二区3| 欧美jizz19hd性欧美| 国产精品系列在线播放| 亚洲伦理自拍| 久久嫩草精品久久久精品一| 欧美午夜电影一区| 亚洲国产精品成人va在线观看| 亚洲欧美日韩精品一区二区| 欧美激情第二页| 国自产拍偷拍福利精品免费一| 一本色道久久综合亚洲精品按摩| 久久一区二区精品| 国产精品美女| 99av国产精品欲麻豆| 久久久久一本一区二区青青蜜月| 欧美亚州韩日在线看免费版国语版| 亚洲第一精品在线| 久久精品国产清高在天天线| 国产精品久久久久久久久免费桃花| 亚洲破处大片| 久久夜色精品| 国产真实久久| 午夜亚洲福利| 国产精品豆花视频| 日韩天天综合| 蘑菇福利视频一区播放| 狠狠色综合网| 久久国产成人| 国产乱肥老妇国产一区二| 一区二区三区欧美在线观看| 欧美福利视频网站| 在线成人国产| 久久男人av资源网站| 国产日韩欧美中文| 亚洲欧美国产77777| 欧美日韩在线直播| 99人久久精品视频最新地址| 免费影视亚洲| 在线不卡亚洲| 六月丁香综合| 亚洲成人在线免费| 久久综合伊人77777尤物| 国产一区二区精品| 欧美在线精品免播放器视频| 国产伦精品一区二区三| 在线视频日韩| 欧美视频在线观看 亚洲欧| 欧美国产一区二区在线观看| 久久精品国产免费看久久精品| 欧美韩日亚洲| 在线观看日韩av先锋影音电影院 | 在线色欧美三级视频| 欧美日韩国产综合视频在线观看中文 | 亚洲一区二区精品视频| 欧美一区二区三区精品 | 欧美一区二区在线| 欧美精品日日鲁夜夜添| 国内精品亚洲| 夜夜夜精品看看| 尹人成人综合网| 欧美日韩成人综合在线一区二区| 一区二区三区视频在线观看| 国产亚洲欧美一区二区三区| 欧美天天在线| 国产精品女主播在线观看| 国产精品乱人伦一区二区| 欧美午夜精品伦理| 欧美日韩国产首页| 欧美在线日韩| 一本久道久久综合狠狠爱| 99国产精品一区| 亚洲精品偷拍| 亚洲女与黑人做爰| 欧美精品黄色| 亚洲国产欧美日韩| 欧美一二区视频| 亚洲欧美春色| 久久久久久亚洲精品杨幂换脸| 欧美mv日韩mv国产网站| 国产精品电影网站| 亚洲高清一区二| 久久久国产91| 国产精品美女久久| 亚洲精品在线免费观看视频| 久热爱精品视频线路一| 国产精品v欧美精品v日韩 | 欧美一区二区在线观看| 国产色视频一区| 在线观看欧美日韩国产| 亚洲无毛电影| 国产精品成人一区二区| 亚洲日韩视频| 欧美成人一区二区在线 | 亚洲黄色片网站| 狠狠色丁香久久综合频道| 亚洲精品在线电影| 国产精品成人一区二区| 久久精品一二三区| 91久久极品少妇xxxxⅹ软件| 国产精品久久久久9999| 久久亚洲国产精品日日av夜夜| 亚洲经典视频在线观看| 国产精品免费看| 美日韩精品免费| 亚洲专区在线视频| 亚洲电影免费观看高清完整版在线| 欧美日韩国产色站一区二区三区| 欧美在线你懂的| 亚洲精品一区在线观看| 国产日本欧美一区二区三区| 欧美激情第9页| 久久激情视频| 一区二区三区蜜桃网| 精品999久久久| 国产精品毛片va一区二区三区 | 亚洲日本黄色| 国产日韩欧美在线视频观看| 欧美绝品在线观看成人午夜影视| 欧美一区二区三区啪啪| 亚洲免费观看| 激情一区二区| 国产精品日日摸夜夜添夜夜av | 国产精品久久久久免费a∨| 美女视频黄 久久| 亚洲午夜在线视频| 亚洲国产网站| 国模精品一区二区三区| 欧美性猛交99久久久久99按摩| 老司机午夜免费精品视频| 亚洲一区免费在线观看| 亚洲人成在线观看一区二区 | 日韩午夜精品| 一色屋精品视频免费看| 国产精品区二区三区日本| 欧美激情视频免费观看| 久久这里有精品15一区二区三区| 午夜视频久久久久久| 日韩午夜电影在线观看| 影音先锋中文字幕一区| 国产精品亚洲精品| 欧美深夜福利| 欧美风情在线| 美女任你摸久久| 久久久久久久久蜜桃| 亚洲欧美日本在线| 一本色道久久99精品综合 | 欧美一区二区女人| 亚洲一区二区三区在线看| 亚洲伦理在线观看| 亚洲国产日韩欧美| 伊人蜜桃色噜噜激情综合| 国产日产欧产精品推荐色| 国产精品福利在线| 欧美日韩日本视频| 欧美激情在线播放| 欧美不卡在线视频| 免费观看一区| 麻豆免费精品视频| 久久影视精品| 另类天堂av| 美女精品自拍一二三四| 久久午夜精品一区二区| 久久精品视频va| 久久国产精品一区二区三区| 欧美亚洲色图校园春色| 亚洲伊人一本大道中文字幕| 一区二区欧美亚洲| 亚洲少妇中出一区| 亚洲视频观看| 中文欧美日韩| 亚洲一区二区在线播放| 亚洲一区二区av电影| 亚洲永久字幕| 午夜久久资源| 久久国产日韩欧美|