国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

「萬(wàn)字圖文」史上最姨母級(jí)Java繼承詳解

共 20748字,需瀏覽 42分鐘

 ·

2021-04-21 04:54


點(diǎn)擊上方藍(lán)字關(guān)注我,設(shè)為星標(biāo),任何轉(zhuǎn)載請(qǐng)滴滴我授權(quán)

課程導(dǎo)學(xué)

在Java課堂中,所有老師不得不提到面向?qū)ο?/strong>(Object Oriented),而在談到面向?qū)ο蟮臅r(shí)候,又不得不提到面向?qū)ο蟮娜筇卣鳎悍庋b、繼承、多態(tài)。三大特征緊密聯(lián)系而又有區(qū)別,本課程就帶你學(xué)習(xí)Java的繼承。

你可能不知道繼承到底有什么用,但你大概率曾有過這樣的經(jīng)歷:寫Java項(xiàng)目/作業(yè)時(shí)候創(chuàng)建很多相似的類,類中也有很多相同的方法,做了很多重復(fù)的工作量,感覺很臃腫。而合理使用繼承就能大大減少重復(fù)代碼,提高代碼復(fù)用性。


繼承的初相識(shí)

學(xué)習(xí)繼承,肯定是先從廣的概念了解繼承是什么以及其作用,然后才從細(xì)的方面學(xué)習(xí)繼承的具體實(shí)現(xiàn)細(xì)節(jié),本關(guān)就是帶你先快速了解和理解繼承的重要概念。

什么是繼承

繼承(英語(yǔ):inheritance)是面向?qū)ο筌浖夹g(shù)中的一個(gè)概念。它使得復(fù)用以前的代碼非常容易,能夠大大縮短開發(fā)周期,降低開發(fā)費(fèi)用。

Java語(yǔ)言是非常典型的面向?qū)ο蟮恼Z(yǔ)言,在Java語(yǔ)言中繼承就是子類繼承父類的屬性和方法,使得子類對(duì)象(實(shí)例)具有父類的屬性和方法,或子類從父類繼承方法,使得子類具有父類相同的方法。父類有時(shí)也叫基類、超類;子類有時(shí)也被稱為派生類。

我們來舉個(gè)例子:我們知道動(dòng)物有很多種,是一個(gè)比較大的概念。在動(dòng)物的種類中,我們熟悉的有貓(Cat)、狗(Dog)等動(dòng)物,它們都有動(dòng)物的一般特征(比如能夠吃東西,能夠發(fā)出聲音),不過又在細(xì)節(jié)上有區(qū)別(不同動(dòng)物的吃的不同,叫聲不一樣)。在Java語(yǔ)言中實(shí)現(xiàn)Cat和Dog等類的時(shí)候,就需要繼承Animal這個(gè)類。繼承之后Cat、Dog等具體動(dòng)物類就是子類,Animal類就是父類。


為什么需要繼承

你可能會(huì)疑問為什么需要繼承?在具體實(shí)現(xiàn)的時(shí)候,我們創(chuàng)建Dog,Cat等類的時(shí)候?qū)崿F(xiàn)其具體的方法不就可以了嘛,實(shí)現(xiàn)這個(gè)繼承似乎使得這個(gè)類的結(jié)構(gòu)不那么清晰。

如果僅僅只有兩三個(gè)類,每個(gè)類的屬性和方法很有限的情況下確實(shí)沒必要實(shí)現(xiàn)繼承,但事情并非如此,事實(shí)上一個(gè)系統(tǒng)中往往有很多個(gè)類并且有著很多相似之處,比如貓和狗同屬動(dòng)物,或者學(xué)生和老師同屬人。各個(gè)類可能又有很多個(gè)相同的屬性和方法,這樣的話如果每個(gè)類都重新寫不僅代碼顯得很亂,代碼工作量也很大。

這時(shí)繼承的優(yōu)勢(shì)就出來了:可以直接使用父類的屬性和方法,自己也可以有自己新的屬性和方法滿足拓展,父類的方法如果自己有需求更改也可以重寫。這樣使用繼承不僅大大的減少了代碼量,也使得代碼結(jié)構(gòu)更加清晰可見。


所以這樣從代碼的層面上來看我們?cè)O(shè)計(jì)這個(gè)完整的Animal類是這樣的:

class Animal
{
    public int id;
    public String name;
    public int age;
    public int weight;

    public Animal(int id, String name, int age, int weight) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
    //這里省略get set方法
    public void sayHello()
    
{
        System.out.println("hello");
    }
    public void eat()
    
{
        System.out.println("I'm eating");
    }
    public void sing()
    
{
        System.out.println("sing");
    }
}

而Dog,Cat,Chicken類可以這樣設(shè)計(jì):

class Dog extends Animal//繼承animal
{
    public Dog(int id, String name, int age, int weight) {
        super(id, name, age, weight);//調(diào)用父類構(gòu)造方法
    }
}
class Cat extends Animal{

    public Cat(int id, String name, int age, int weight) {
        super(id, name, age, weight);//調(diào)用父類構(gòu)造方法
    }
}
class Chicken extends Animal{

    public Chicken(int id, String name, int age, int weight) {
        super(id, name, age, weight);//調(diào)用父類構(gòu)造方法
    }
    //雞下蛋
    public void layEggs()
    
{
        System.out.println("我是老母雞下蛋啦,咯噠咯!咯噠咯!");
    }
}

各自的類繼承Animal后可以直接使用Animal類的屬性和方法而不需要重復(fù)編寫,各個(gè)類如果有自己的方法也可很容易地拓展。上述代碼中你需要注意extends就是用來實(shí)現(xiàn)繼承的。

繼承的分類

繼承分為單繼承和多繼承,Java語(yǔ)言只支持類的單繼承,但可以通過實(shí)現(xiàn)接口的方式達(dá)到多繼承的目的。我們先用一張表概述一下兩者的區(qū)別,然后再展開講解。


定義優(yōu)缺點(diǎn)
單繼承
一個(gè)子類只擁有一個(gè)父類優(yōu)點(diǎn):在類層次結(jié)構(gòu)上比較清晰
缺點(diǎn):結(jié)構(gòu)的豐富度有時(shí)不能滿足使用需求
多繼承(Java不支持,但可以用其它方式滿足多繼承使用需求)
一個(gè)子類擁有多個(gè)直接的父類優(yōu)點(diǎn):子類的豐富度很高
缺點(diǎn):容易造成混亂

單繼承

單繼承,是一個(gè)子類只擁有一個(gè)父類,如我們上面講過的Animal類和它的子類。單繼承在類層次結(jié)構(gòu)上比較清晰,但缺點(diǎn)是結(jié)構(gòu)的豐富度有時(shí)不能滿足使用需求

多繼承(Java不支持,但可以實(shí)現(xiàn))

多繼承,是一個(gè)子類擁有多個(gè)直接的父類。這樣做的好處是子類擁有所有父類的特征,子類的豐富度很高,但是缺點(diǎn)就是容易造成混亂。下圖為一個(gè)混亂的例子。


Java雖然不支持多繼承,但是Java有三種實(shí)現(xiàn)多繼承效果的方式,分別是內(nèi)部類、多層繼承和實(shí)現(xiàn)接口。

內(nèi)部類可以繼承一個(gè)與外部類無(wú)關(guān)的類,保證了內(nèi)部類的獨(dú)立性,正是基于這一點(diǎn),可以達(dá)到多繼承的效果。

多層繼承:子類繼承父類,父類如果還繼承其他的類,那么這就叫多層繼承。這樣子類就會(huì)擁有所有被繼承類的屬性和方法。


實(shí)現(xiàn)接口無(wú)疑是滿足多繼承使用需求的最好方式,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口滿足自己在豐富性和復(fù)雜環(huán)境的使用需求。類和接口相比,類就是一個(gè)實(shí)體,有屬性和方法,而接口更傾向于一組方法。舉個(gè)例子,就拿斗羅大陸的唐三來看,他存在的繼承關(guān)系可能是這樣的:


如何實(shí)現(xiàn)繼承

實(shí)現(xiàn)繼承除了上面用到的extends外,還可以用implements這個(gè)關(guān)鍵字實(shí)現(xiàn)。下面,讓我給你逐一講解一下。

extends關(guān)鍵字

在Java中,類的繼承是單一繼承,也就是說一個(gè)子類只能擁有一個(gè)父類,所以extends只能繼承一個(gè)類。其使用語(yǔ)法為:

class 子類名 extends 父類名{}

例如Dog類繼承Animal類,它是這樣的:

class Animal{} //定義Animal類
class Dog extends Animal{} //Dog類繼承Animal類

子類繼承父類后,就擁有父類的非私有的屬性和方法。如果不明白,請(qǐng)看這個(gè)案例,在IDEA下創(chuàng)建一個(gè)項(xiàng)目,創(chuàng)建一個(gè)test類做測(cè)試,分別創(chuàng)建Animal類和Dog類,Animal作為父類寫一個(gè)sayHello()方法,Dog類繼承Animal類之后就可以調(diào)用sayHello()方法。具體代碼為:

class Animal {
    public void  sayHello()//父類的方法
    
{
        System.out.println("hello,everybody");
    }
}
class Dog extends Animal//繼承animal
{ }
public class test {
    public static void main(String[] args) {
       Dog dog=new Dog();
       dog.sayHello();
    }
}

點(diǎn)擊運(yùn)行的時(shí)候Dog子類可以直接使用Animal父類的方法。


implements 關(guān)鍵字

使用implements 關(guān)鍵字可以變相使Java擁有多繼承的特性,使用范圍為類實(shí)現(xiàn)接口的情況,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口(接口與接口之間用逗號(hào)分開)。Java接口是一系列方法的聲明,一個(gè)接口中沒有方法的具體實(shí)現(xiàn) 。子類實(shí)現(xiàn)接口的時(shí)候必須重寫接口中的方法。

我們來看一個(gè)案例,創(chuàng)建一個(gè)test2類做測(cè)試,分別創(chuàng)建doA接口和doB接口,doA接口聲明sayHello()方法,doB接口聲明eat()方法,創(chuàng)建Cat2類實(shí)現(xiàn)doA和doB接口,并且在類中需要重寫sayHello()方法和eat()方法。具體代碼為:

interface doA{
     void sayHello();
}
interface doB{
     void eat();
    //以下會(huì)報(bào)錯(cuò) 接口中的方法不能具體定義只能聲明
    //public void eat(){System.out.println("eating");}
}
class Cat2 implements  doA,doB{
    @Override//必須重寫接口內(nèi)的方法
    public void sayHello() {
        System.out.println("hello!");
    }
    @Override
    public void eat() {
        System.out.println("I'm eating");
    }
}
public class test2 {
    public static void main(String[] args) {
        Cat2 cat=new Cat2();
        cat.sayHello();
        cat.eat();
    }
}

Cat類實(shí)現(xiàn)doA和doB接口的時(shí)候,需要實(shí)現(xiàn)其聲明的方法,點(diǎn)擊運(yùn)行結(jié)果如下,這就是一個(gè)類實(shí)現(xiàn)接口的簡(jiǎn)單案例:


繼承的特點(diǎn)

繼承的主要內(nèi)容就是子類繼承父類,并重寫父類的方法。使用子類的屬性或方法時(shí)候,首先要?jiǎng)?chuàng)建一個(gè)對(duì)象,而對(duì)象通過構(gòu)造方法去創(chuàng)建,在構(gòu)造方法中我們可能會(huì)調(diào)用子父類的一些屬性和方法,所以就需要提前掌握this和super關(guān)鍵字。創(chuàng)建完這個(gè)對(duì)象之后,在調(diào)用重寫父類的方法,并區(qū)別重寫和重載的區(qū)別。所以本節(jié)根據(jù)this、super關(guān)鍵字—>構(gòu)造函數(shù)—>方法重寫—>方法重載的順序進(jìn)行講解。

this和super關(guān)鍵字

this和super關(guān)鍵字是繼承中非常重要的知識(shí)點(diǎn),分別表示當(dāng)前對(duì)象的引用和父類對(duì)象的引用,兩者有很大相似又有一些區(qū)別。

this表示當(dāng)前對(duì)象,是指向自己的引用。

this.屬性 // 調(diào)用成員變量,要區(qū)別成員變量和局部變量
this.() // 調(diào)用本類的某個(gè)方法
this() // 表示調(diào)用本類構(gòu)造方法

super表示父類對(duì)象,是指向父類的引用。

super.屬性 // 表示父類對(duì)象中的成員變量
super.方法() // 表示父類對(duì)象中定義的方法
super() // 表示調(diào)用父類構(gòu)造方法

此外,this和super關(guān)鍵字只能出現(xiàn)在非static修飾的代碼中。

this()和super()都只能在構(gòu)造方法的第一行出現(xiàn),如果使用this()表示調(diào)用當(dāng)前類的其他構(gòu)造方法,使用super()表示調(diào)用父類的某個(gè)構(gòu)造方法,所以兩者只能根據(jù)自己使用需求選擇其一。

寫一個(gè)小案例,創(chuàng)建D1類和子類D2如下:

class D1{
    public D1() {}//無(wú)參構(gòu)造
    public void sayHello() {
        System.out.println("hello");
    }
}
class D2 extends D1{
    public String name;
    public D2(){
        super();//調(diào)用父類構(gòu)造方法
        this.name="BigSai";//給當(dāng)前類成員變量賦值
    }
    @Override
    public void sayHello() {
        System.out.println("hello,我是"+this.name);
    }
    public void test()
    
{
        super.sayHello();//調(diào)用父類方法
        this.sayHello();//調(diào)用當(dāng)前類其他方法
    }
}
public class test8 {
    public static void main(String[] args) {
        D2 d2=new D2();
        d2.test();
    }
}

執(zhí)行的結(jié)果為:


構(gòu)造方法

構(gòu)造方法是一種特殊的方法,它是一個(gè)與類同名的方法。對(duì)象的創(chuàng)建就通過構(gòu)造方法來完成,其主要的功能是完成對(duì)象的初始化。但在繼承中構(gòu)造方法是一種比較特殊的方法(比如不能繼承),所以要了解和學(xué)習(xí)在繼承中構(gòu)造方法的規(guī)則和要求。

構(gòu)造方法可分為有參構(gòu)造和無(wú)參構(gòu)造,這個(gè)可以根據(jù)自己的使用需求合理設(shè)置構(gòu)造方法。但繼承中的構(gòu)造方法有以下幾點(diǎn)需要注意:

父類的構(gòu)造方法不能被繼承:

因?yàn)闃?gòu)造方法語(yǔ)法是與類同名,而繼承則不更改方法名,如果子類繼承父類的構(gòu)造方法,那明顯與構(gòu)造方法的語(yǔ)法沖突了。比如Father類的構(gòu)造方法名為Father(),Son類如果繼承Father類的構(gòu)造方法Father(),那就和構(gòu)造方法定義:構(gòu)造方法與類同名沖突了,所以在子類中不能繼承父類的構(gòu)造方法,但子類會(huì)調(diào)用父類的構(gòu)造方法。

子類的構(gòu)造過程必須調(diào)用其父類的構(gòu)造方法:

Java虛擬機(jī)構(gòu)造子類對(duì)象前會(huì)先構(gòu)造父類對(duì)象,父類對(duì)象構(gòu)造完成之后再來構(gòu)造子類特有的屬性,這被稱為內(nèi)存疊加。而Java虛擬機(jī)構(gòu)造父類對(duì)象會(huì)執(zhí)行父類的構(gòu)造方法,所以子類構(gòu)造方法必須調(diào)用super()即父類的構(gòu)造方法。就比如一個(gè)簡(jiǎn)單的繼承案例應(yīng)該這么寫:

class A{
    public String name;
    public A() {//無(wú)參構(gòu)造
    }
    public A (String name){//有參構(gòu)造
    }
}
class B extends A{
    public B() {//無(wú)參構(gòu)造
       super();
    }
    public B(String name) {//有參構(gòu)造
      //super();
       super(name);
    }
}

如果子類的構(gòu)造方法中沒有顯示地調(diào)用父類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無(wú)參數(shù)的構(gòu)造方法。

你可能有時(shí)候在寫繼承的時(shí)候子類并沒有使用super()調(diào)用,程序依然沒問題,其實(shí)這樣是為了節(jié)省代碼,系統(tǒng)執(zhí)行時(shí)會(huì)自動(dòng)添加父類的無(wú)參構(gòu)造方式,如果不信的話我們對(duì)上面的類稍作修改執(zhí)行:

image-20201026201029796

方法重寫(Override)

方法重寫也就是子類中出現(xiàn)和父類中一模一樣的方法(包括返回值類型,方法名,參數(shù)列表),它建立在繼承的基礎(chǔ)上。你可以理解為方法的外殼不變,但是核心內(nèi)容重寫。

在這里提供一個(gè)簡(jiǎn)單易懂的方法重寫案例:

class E1{
    public void doA(int a){
        System.out.println("這是父類的方法");
    }
}
class E2 extends E1{
    @Override
    public void doA(int a) {
        System.out.println("我重寫父類方法,這是子類的方法");
    }
}

其中@Override注解顯示聲明該方法為注解方法,可以幫你檢查重寫方法的語(yǔ)法正確性,當(dāng)然如果不加也是可以的,但建議加上。

對(duì)于重寫,你需要注意以下幾點(diǎn):

從重寫的要求上看:

  • 重寫的方法和父類的要一致(包括返回值類型、方法名、參數(shù)列表)
  • 方法重寫只存在于子類和父類之間,同一個(gè)類中只能重載

從訪問權(quán)限上看:

  • 子類方法不能縮小父類方法的訪問權(quán)限
  • 子類方法不能拋出比父類方法更多的異常
  • 父類的私有方法不能被子類重寫

從靜態(tài)和非靜態(tài)上看:

  • 父類的靜態(tài)方法不能被子類重寫為非靜態(tài)方法
  • 子類可以定義于父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法(滿足重寫約束)
  • 父類的非靜態(tài)方法不能被子類重寫為靜態(tài)方法

從抽象和非抽象來看:

  • 父類的抽象方法可以被子類通過兩種途徑重寫(即實(shí)現(xiàn)和重寫)
  • 父類的非抽象方法可以被重寫為抽象方法

當(dāng)然,這些規(guī)則可能涉及一些修飾符,在第三關(guān)中會(huì)詳細(xì)介紹。

方法重載(Overload)

如果有兩個(gè)方法的方法名相同,但參數(shù)不一致,那么可以說一個(gè)方法是另一個(gè)方法的重載。方法重載規(guī)則如下:

  • 被重載的方法必須改變參數(shù)列表(參數(shù)個(gè)數(shù)或類型或順序不一樣)
  • 被重載的方法可以改變返回類型
  • 被重載的方法可以改變?cè)L問修飾符
  • 被重載的方法可以聲明新的或更廣的檢查異常
  • 方法能夠在同一個(gè)類中或者在一個(gè)子類中被重載
  • 無(wú)法以返回值類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)

重載可以通常理解為完成同一個(gè)事情的方法名相同,但是參數(shù)列表不同其他條件也可能不同。一個(gè)簡(jiǎn)單的方法重載的例子,類E3中的add()方法就是一個(gè)重載方法。

class E3{
    public int add(int a,int b){
        return a+b;
    }
    public double add(double a,double b) {
        return a+b;
    }
    public int add(int a,int b,int c) {
        return a+b+c;
    }
}

方法重寫和方法重載的區(qū)別

方法重寫和方法重載名稱上容易混淆,但內(nèi)容上有很大區(qū)別,下面用一個(gè)表格列出其中區(qū)別:

區(qū)別點(diǎn)方法重寫方法重載
結(jié)構(gòu)上垂直結(jié)構(gòu),是一種父子類之間的關(guān)系水平結(jié)構(gòu),是一種同類之間關(guān)系
參數(shù)列表不可以修改可以修改
訪問修飾符子類的訪問修飾符范圍必須大于等于父類訪問修飾符范圍可以修改
拋出異常子類方法異常必須是父類方法異常或父類方法異常子異常可以修改

繼承與修飾符

Java修飾符的作用就是對(duì)類或類成員進(jìn)行修飾或限制,每個(gè)修飾符都有自己的作用,而在繼承中可能有些特殊修飾符使得被修飾的屬性或方法不能被繼承,或者繼承需要一些其他的條件,下面就詳細(xì)介紹在繼承中一些修飾符的作用和特性。

Java語(yǔ)言提供了很多修飾符,修飾符用來定義類、方法或者變量,通常放在語(yǔ)句的最前端。主要分為以下兩類:

  • 訪問修飾符
  • 非訪問修飾符

這里訪問修飾符主要講解public,protected,default,private四種訪問控制修飾符。非訪問修飾符這里就介紹static修飾符,final修飾符和abstract修飾符。

訪問修飾符

public,protected,default(無(wú)修飾詞),private修飾符是面向?qū)ο笾蟹浅V匾闹R(shí)點(diǎn),而在繼承中也需要懂得各種修飾符使用規(guī)則。

首先我們都知道不同的關(guān)鍵字作用域不同,四種關(guān)鍵字的作用域如下:


同一個(gè)類同一個(gè)包不同包子類不同包非子類
private?


default??

protect???
public????
  1. private:Java語(yǔ)言中對(duì)訪問權(quán)限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的屬性以及方法只能被該類的對(duì)象訪問,其子類不能訪問,更不能允許跨包訪問。

  2. default:(也有稱friendly)即不加任何訪問修飾符,通常稱為“默認(rèn)訪問權(quán)限“或者“包訪問權(quán)限”。該模式下,只允許在同一個(gè)包中進(jìn)行訪問。

  3. protected:介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護(hù)訪問權(quán)限”。被其修飾的屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。

  4. public:Java語(yǔ)言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包訪問。

Java 子類重寫繼承的方法時(shí),不可以降低方法的訪問權(quán)限,子類繼承父類的訪問修飾符作用域不能比父類小,也就是更加開放,假如父類是protected修飾的,其子類只能是protected或者public,絕對(duì)不能是default(默認(rèn)的訪問范圍)或者private。所以在繼承中需要重寫的方法不能使用private修飾詞修飾。

如果還是不太清楚可以看幾個(gè)小案例就很容易搞懂,寫一個(gè)A1類中用四種修飾詞實(shí)現(xiàn)四個(gè)方法,用子類A2繼承A1,重寫A1方法時(shí)候你就會(huì)發(fā)現(xiàn)父類私有方法不能重寫,非私有方法重寫使用的修飾符作用域不能變小(大于等于)。


正確的案例應(yīng)該為:

class A1 {
    private void doA(){ }
    void doB(){}//default
    protected void doC(){}
    public void doD(){}
}
class A2 extends A1{

    @Override
    public void doB() { }//繼承子類重寫的方法訪問修飾符權(quán)限可擴(kuò)大

    @Override
    protected void doC() { }//繼承子類重寫的方法訪問修飾符權(quán)限可和父類一致

    @Override
    public void doD() { }//不可用protected或者default修飾
}

還要注意的是,繼承當(dāng)中子類拋出的異常必須是父類拋出的異?;蚋割悞伋霎惓5淖赢惓?/strong>。下面的一個(gè)案例四種方法測(cè)試可以發(fā)現(xiàn)子類方法的異常不可大于父類對(duì)應(yīng)方法拋出異常的范圍。


正確的案例應(yīng)該為:

class B1{
    public void doA() throws Exception{}
    public void doB() throws Exception{}
    public void doC() throws IOException{}
    public void doD() throws IOException{}
}
class B2 extends B1{
    //異常范圍和父類可以一致
    @Override
    public void doA() throws Exception { }
    //異常范圍可以比父類更小
    @Override
    public void doB() throws IOException { }
    //異常范圍 不可以比父類范圍更大
    @Override
    public void doC() throws IOException { }//不可拋出Exception等比IOException更大的異常
    @Override
    public void doD() throws IOException { }
}

非訪問修飾符

訪問修飾符用來控制訪問權(quán)限,而非訪問修飾符每個(gè)都有各自的作用,下面針對(duì)static、final、abstract修飾符進(jìn)行介紹。

static 修飾符

static 翻譯為“靜態(tài)的”,能夠與變量,方法和類一起使用,稱為靜態(tài)變量,靜態(tài)方法(也稱為類變量、類方法)。如果在一個(gè)類中使用static修飾變量或者方法的話,它們可以直接通過類訪問,不需要?jiǎng)?chuàng)建一個(gè)類的對(duì)象來訪問成員。

我們?cè)谠O(shè)計(jì)類的時(shí)候可能會(huì)使用靜態(tài)方法,有很多工具類比如Math,Arrays等類里面就寫了很多靜態(tài)方法。static修飾符的規(guī)則很多,這里僅僅介紹和Java繼承相關(guān)用法的規(guī)則:

  • 構(gòu)造方法不允許聲明為 static 的。
  • 靜態(tài)方法中不存在當(dāng)前對(duì)象,因而不能使用 this,當(dāng)然也不能使用 super。
  • 靜態(tài)方法不能被非靜態(tài)方法重寫(覆蓋)
  • 靜態(tài)方法能被靜態(tài)方法重寫(覆蓋)

可以看以下的案例證明上述規(guī)則:


源代碼為:

class C1{
    public  int a;
    public C1(){}
   // public static C1(){}// 構(gòu)造方法不允許被聲明為static
    public static void doA() {}
    public static void doB() {}
}
class C2 extends C1{
    public static  void doC()//靜態(tài)方法中不存在當(dāng)前對(duì)象,因而不能使用this和super。
    
{
        //System.out.println(super.a);
    }
    public static void doA(){}//靜態(tài)方法能被靜態(tài)方法重寫
   // public void doB(){}//靜態(tài)方法不能被非靜態(tài)方法重寫
}

final修飾符

final變量:

  • final 表示"最后的、最終的"含義,變量一旦賦值后,不能被重新賦值。被 final 修飾的實(shí)例變量必須顯式指定初始值(即不能只聲明)。final 修飾符通常和 static 修飾符一起使用來創(chuàng)建類常量。

final 方法:

  • 父類中的 final 方法可以被子類繼承,但是不能被子類重寫。聲明 final 方法的主要目的是防止該方法的內(nèi)容被修改。

final類:

  • final 類不能被繼承,沒有類能夠繼承 final 類的任何特性。

所以無(wú)論是變量、方法還是類被final修飾之后,都有代表最終、最后的意思。內(nèi)容無(wú)法被修改。

abstract 修飾符

abstract 英文名為“抽象的”,主要用來修飾類和方法,稱為抽象類和抽象方法。

抽象方法:有很多不同類的方法是相似的,但是具體內(nèi)容又不太一樣,所以我們只能抽取他的聲明,沒有具體的方法體,即抽象方法可以表達(dá)概念但無(wú)法具體實(shí)現(xiàn)。

抽象類有抽象方法的類必須是抽象類,抽象類可以表達(dá)概念但是無(wú)法構(gòu)造實(shí)體的類。

抽象類和抽象方法內(nèi)容和規(guī)則比較多。這里只提及一些和繼承有關(guān)的用法和規(guī)則:

  • 抽象類也是類,如果一個(gè)類繼承于抽象類,就不能繼承于其他的(類或抽象類)
  • 子類可以繼承于抽象類,但是一定要實(shí)現(xiàn)父類們所有abstract的方法。如果不能完全實(shí)現(xiàn),那么子類也必須被定義為抽象類
  • 只有實(shí)現(xiàn)父類的所有抽象方法,才能是完整類。

比如我們可以這樣設(shè)計(jì)一個(gè)People抽象類以及一個(gè)抽象方法,在子類中具體完成:

abstract class People{
    public abstract void sayHello();//抽象方法
}
class Chinese extends People{
    @Override
    public void sayHello() {//實(shí)現(xiàn)抽象方法
        System.out.println("你好");
    }
}
class Japanese extends People{
    @Override
    public void sayHello() {//實(shí)現(xiàn)抽象方法
        System.out.println("口你七哇");
    }
}
class American extends People{
    @Override
    public void sayHello() {//實(shí)現(xiàn)抽象方法
        System.out.println("hello");
    }
}

Object類和轉(zhuǎn)型

提到Java繼承,不得不提及所有類的根類:Object(java.lang.Object)類,如果一個(gè)類沒有顯式聲明它的父類(即沒有寫extends xx),那么默認(rèn)這個(gè)類的父類就是Object類,任何類都可以使用Object類的方法,創(chuàng)建的類也可和Object進(jìn)行向上、向下轉(zhuǎn)型,所以O(shè)bject類是掌握和理解繼承所必須的知識(shí)點(diǎn)。而Java向上和向下轉(zhuǎn)型在Java中運(yùn)用很多,也是建立在繼承的基礎(chǔ)上,所以Java轉(zhuǎn)型也是掌握和理解繼承所必須的知識(shí)點(diǎn)。

Object類概述

  1. Object是類層次結(jié)構(gòu)的根類,所有的類都隱式的繼承自O(shè)bject類。

  2. Java所有的對(duì)象都擁有Object默認(rèn)方法

  3. Object類的構(gòu)造方法有一個(gè),并且是無(wú)參構(gòu)造

Object是java所有類的父類,是整個(gè)類繼承結(jié)構(gòu)的頂端,也是最抽象的一個(gè)類。像toString()、equals()、hashCode()、wait()、notify()、getClass()等都是Object的方法。你以后可能會(huì)經(jīng)常碰到,但其中遇到更多的就是toString()方法和equals()方法,我們經(jīng)常需要重寫這兩種方法滿足我們的使用需求。

**toString()**方法表示返回該對(duì)象的字符串,由于各個(gè)對(duì)象構(gòu)造不同所以需要重寫,如果不重寫的話默認(rèn)返回類名@hashCode格式。

如果重寫toString()方法后直接調(diào)用toString()方法就可以返回我們自定義的該類轉(zhuǎn)成字符串類型的內(nèi)容輸出,而不需要每次都手動(dòng)的拼湊成字符串內(nèi)容輸出,大大簡(jiǎn)化輸出操作。

**equals()方法主要比較兩個(gè)對(duì)象是否相等,因?yàn)閷?duì)象的相等不一定非要嚴(yán)格要求兩個(gè)對(duì)象地址上的相同,有時(shí)內(nèi)容上的相同我們就會(huì)認(rèn)為它相等,比如String 類就重寫了euqals()**方法,通過字符串的內(nèi)容比較是否相等。


向上轉(zhuǎn)型

向上轉(zhuǎn)型 : 通過子類對(duì)象(小范圍)實(shí)例化父類對(duì)象(大范圍),這種屬于自動(dòng)轉(zhuǎn)換。用一張圖就能很好地表示向上轉(zhuǎn)型的邏輯:


父類引用變量指向子類對(duì)象后,只能使用父類已聲明的方法,但方法如果被重寫會(huì)執(zhí)行子類的方法,如果方法未被重寫那么將執(zhí)行父類的方法。

向下轉(zhuǎn)型

向下轉(zhuǎn)型 : 通過父類對(duì)象(大范圍)實(shí)例化子類對(duì)象(小范圍),在書寫上父類對(duì)象需要加括號(hào)()強(qiáng)制轉(zhuǎn)換為子類類型。但父類引用變量實(shí)際引用必須是子類對(duì)象才能成功轉(zhuǎn)型,這里也用一張圖就能很好表示向上轉(zhuǎn)型的邏輯:


子類引用變量指向父類引用變量指向的對(duì)象后(一個(gè)Son()對(duì)象),就完成向下轉(zhuǎn)型,就可以調(diào)用一些子類特有而父類沒有的方法 。

在這里寫一個(gè)向上轉(zhuǎn)型和向下轉(zhuǎn)型的案例:

Object object=new Integer(666);//向上轉(zhuǎn)型

Integer i=(Integer)object;//向下轉(zhuǎn)型Object->Integer,object的實(shí)質(zhì)還是指向Integer

String str=(String)object;//錯(cuò)誤的向下轉(zhuǎn)型,雖然編譯器不會(huì)報(bào)錯(cuò)但是運(yùn)行會(huì)報(bào)錯(cuò)

子父類初始化順序

在Java繼承中,父子類初始化先后順序?yàn)椋?/p>

  1. 父類中靜態(tài)成員變量和靜態(tài)代碼塊

  2. 子類中靜態(tài)成員變量和靜態(tài)代碼塊

  3. 父類中普通成員變量和代碼塊,父類的構(gòu)造函數(shù)

  4. 子類中普通成員變量和代碼塊,子類的構(gòu)造函數(shù)

總的來說,就是靜態(tài)>非靜態(tài),父類>子類,非構(gòu)造函數(shù)>構(gòu)造函數(shù)。同一類別(例如普通變量和普通代碼塊)成員變量和代碼塊執(zhí)行從前到后,需要注意邏輯。

這個(gè)也不難理解,靜態(tài)變量也稱類變量,可以看成一個(gè)全局變量,靜態(tài)成員變量和靜態(tài)代碼塊在類加載的時(shí)候就初始化,而非靜態(tài)變量和代碼塊在對(duì)象創(chuàng)建的時(shí)候初始化。所以靜態(tài)快于非靜態(tài)初始化。

而在創(chuàng)建子類對(duì)象的時(shí)候需要先創(chuàng)建父類對(duì)象,所以父類優(yōu)先于子類。

而在調(diào)用構(gòu)造函數(shù)的時(shí)候,是對(duì)成員變量進(jìn)行一些初始化操作,所以普通成員變量和代碼塊優(yōu)于構(gòu)造函數(shù)執(zhí)行。

至于更深層次為什么這個(gè)順序,就要更深入了解JVM執(zhí)行流程啦。下面一個(gè)測(cè)試代碼為:

class Father{
    public Father() {
        System.out.println(++b1+"父類構(gòu)造方法");
    }//父類構(gòu)造方法 第四
    static int a1=0;//父類static 第一 注意順序
    static {
        System.out.println(++a1+"父類static");
    }
    int b1=a1;//父類成員變量和代碼塊 第三
    {
        System.out.println(++b1+"父類代碼塊");
    }
}
class Son extends Father{
    public Son() {
        System.out.println(++b2+"子類構(gòu)造方法");
    }//子類構(gòu)造方法 第六
    static {//子類static第二步
        System.out.println(++a1+"子類static");
    }
    int b2=b1;//子類成員變量和代碼塊 第五
    {
        System.out.println(++b2 + "子類代碼塊");
    }
}
public class test9 {
    public static void main(String[] args) {
        Son son=new Son();
    }
}

執(zhí)行結(jié)果:


結(jié)語(yǔ)

好啦,本次繼承就介紹到這里啦,Java面向?qū)ο笕筇卣髦焕^承——優(yōu)秀的你已經(jīng)掌握。再看看Java面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。最后問你能大致了解它們的特征嘛?

封裝:是對(duì)類的封裝,封裝是對(duì)類的屬性和方法進(jìn)行封裝,只對(duì)外暴露方法而不暴露具體使用細(xì)節(jié),所以我們一般設(shè)計(jì)類成員變量時(shí)候大多設(shè)為私有而通過一些get、set方法去讀寫。

繼承:子類繼承父類,即“子承父業(yè)”,子類擁有父類除私有的所有屬性和方法,自己還能在此基礎(chǔ)上拓展自己新的屬性和方法。主要目的是復(fù)用代碼。

多態(tài):多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。即一個(gè)父類可能有若干子類,各子類實(shí)現(xiàn)父類方法有多種多樣,調(diào)用父類方法時(shí),父類引用變量指向不同子類實(shí)例而執(zhí)行不同方法,這就是所謂父類方法是多態(tài)的。

最后送你一張圖捋一捋其中的關(guān)系吧。


近期精彩:
硬核!手寫一個(gè)優(yōu)先隊(duì)列
圖解|雙軸快排分析
MongoDB助力一個(gè)物流訂單系統(tǒng)
面試官:什么是緩存穿透、緩存雪崩、緩存擊穿?
16張圖帶你徹底搞懂基數(shù)排序
8張圖帶你分析Redis與MySQL數(shù)據(jù)一致性問題

好了,不說了,咱們下次再見!本文同時(shí)收錄在回車課堂!歡迎查看。最后bigsai請(qǐng)你們在看、關(guān)注支持一波原創(chuàng)小博主,謝謝!


喜歡就點(diǎn)個(gè)在看再走吧

瀏覽 44
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲成人a| 精品无码一区二区三区在线| 免费看黄片| 成人精品三级麻豆| 国产一区二区三区在线| 国产麻豆传媒| 成人天堂| 操逼爆奶网站| 香蕉污视频| 操人人| 无码av高清| 粉嫩av一区二区白浆| 伊人色五月| 天天日天天草| 一级在线| 国内自拍视频在线观看| 豆花网无码视频观看| 亚洲第一成人网址| 蜜桃视频一区二区| 国产精品色在线回看| 国产精品囯产三级囯产AV野外| 国产尤物视频| 欧美干| 久一在线| 欧美又大又粗| 996热| 天堂在线网| 伊人大香蕉视频在线观看| 人妻黑人一区二区三区| 天天撸天天干| 91成人无码看片在线观看网址| 免费av大全| 婷婷乱伦| 国产乱子伦-区二区三区四区 | 亚洲福利视频网站| 97精品| 国产剧情一区二区| 国产乱妇乱子伦视频免费观看让女人 | 91日韩在线| 日本免费A∨| 国产高清无码一区二区| 一级A片视频免费看| 日本69视频| 欧美成在线| 欧美一级无码| 超碰97在线免费观看| 无码高清视频| 五月激情六月婷婷| 精精品人妻一区二区三区| 色大香蕉伊人| 久久极品| 狠狠干高清成人二区三区| 国产乱子伦无码视频免费| 污污污www精品国产网站| 青春草在线免费观看| 日本三级黄色| 亚洲欧洲有码在线| 中文字幕在线观看二区| 97毛片| 国产18禁网站| 岛国无码在线观看| 日韩av无码中文字幕| AV中文在线观看| 在线中文字幕在线观看| 五月天激情小说网| 奇米影视色偷偷| 毛茸茸BBBBBB毛茸茸| 日韩无码久久久| 亚洲AV无码乱码国产| 亚洲欧美在线观看视频| 天堂中文8资源在线8| 亚洲无码AV一区二区三区| 日本一区二区三区四区| 91视频国产精品| 996视频| 午夜福利大香蕉| 精品字幕| 亚洲调教| 亚洲天堂在线观看网站| 国产情侣在线视频| 3DAV一区二区三区动漫| 亚洲欧美国产日韩字幕| 综合视频一区| 狠狠干大香蕉| 中国毛片视频| 91工厂露脸熟女| 亚洲AV人人夜夜澡人人| 国产精品秘久久久久久久久| 91亚洲精品视频在线| 69久蜜桃人妻无码精品一区| 怡红院成人av| 亚洲综合色婷婷| 日韩无码流出| 欧美口爆| www黄片视频| 欧美日韩综合| V天堂| 蜜桃av秘一区二区三区| 成人特级毛片全部免费播放| 国产在线色| 人人操人人爽人人爱| 中文字幕一区二区三区四虎在线| 国产剧情一区二区三区| 亚洲精品视频在线观看网站| 夜夜夜叫天天天做| 在线观看毛片网站| 五月激情六月丁香| 51精品日本| 奇米成人片| 亚洲黄色视频免费看| 婷婷激情五月天丁香| 张柏芝BBw搡BBBB槡BBBBHDfree| 五月天亚洲无码| 十八禁在线播放| 色欲色欲一区二区三区| 亚洲免费性爱视频| BBw日本熟妇BBwHD| 超碰69| 日韩无码性爱视频| 成人黄网在线观看| 无码毛片一区二区三区人口| 中国操逼电影| 18禁91| 不卡成人| 天堂素人约啪| 国产一级操逼视频| 日韩AV手机在线观看| 三级网站免费| 国产成人精品无码区在线| 秋霞一区二区三区无码| eeuss国产| 日韩18在线| 尤物视频网址| 操逼三级| 欧美精品一区二区三区蜜臀| 一级片无码| 日韩免费视频一区| 天天日毛片| 俺去俺来也www色官网cms| 欧美V在线| 91视频播放| 粗长哭叫打桩H体育生| 精品中文字幕在线播放| 婷婷伊人大香蕉| 中文字幕人妻丝袜二区电影| 伊人毛片| 九九福利| 国产成人V在线精品一区| 西西人体WW大胆无码| 综合久久中文字幕| 91人妻人人澡人人添人人爽| 国产主播一区二区| 国模一区二区三区| 色青娱乐| 麻豆乱伦| 午夜无码AV| 婷婷在线电影| 青青操视频在线| 黄色免费毛片| 久久肏屄视频| 久久国产无码| 国产色播| 丰满人妻无码| 骚骚网| 欧美XXXXBBBB| 黄网站在线观看| 国产一区二区三区免费视频| 狠狠干伊人| 日韩欧美高清在线| 亚洲欧美在线一区| 日韩一级A片| 午夜无码AV| AV无码免费一区二区三区不卡| 综合久久视频| 亚洲精品乱码久久久久久蜜桃欧美 | 色mm在线播放| 欧美黄片网站| 黄色香蕉网站| 大香蕉一级红色片青青河边草| 亚洲中文无码在线| 欧美后门菊门交| 九色PORNY9l原创自拍| 欧美亚洲一区二区三区| 超碰一区| 91人妻人人澡人人爽精品| 超碰在线天天| 成人777777免费视频色| 围内精品久久久久久久久白丝制服 | 插菊花综合网站| 日本熟妇HD| 亚洲精品中文字幕在线| 久久精品免费看| 欧美三级长视频| 韩国中文字幕HD久久精品| 短发半推半就AV| 日本高清视频九区| 亚洲视频中文字母| 国产熟女一区二区视频网站| 国产精品视频在线看| 九九热日本| 91在线无码精品秘入口电车| 色欲欲www成人网站| 精品久久久久久久| 99啪啪| aa无码| 日韩wuma| 嫩BBB槡BBBB槡BBBB二一| www.日韩AV| 毛片91| 欧洲AV在线| 韩国无码高清视频| 日韩av在线看| 国产精品做爱| 国产成人免费观看视频| 91网在线观看| 无码电影视频| 久久综合久久鬼色| 天天谢天天干| 国产AV日韩AⅤ亚洲AV中文| 一区二区三区四区精品| 色婷婷久久综合久色| 一区二区三区无码精品| 人人澡人人澡人人| 91精品在线免费观看| 一个人看的www日本高清视频| 午夜人妻AV| 中文字幕天堂在线| va婷婷在线免费观看| 尤物av在线| 樱桃Av| 欧美性生交18XXXXX无码| 午夜乱轮| 91九色91蝌蚪91成人| 中文字幕免费在线播放| 丁香五月色| 日韩中文字幕有码| 亚洲成av人无码| 俄罗斯老熟妇与子伦| 欧美黄片在线| 日韩精品一区二区三区四区蜜桃视频| 免费欧美成人网站| 99久久99久久精品免费看小说。| 亚洲操B| 奇米狠狠干| 亚洲永久| 久久精品免费| 日韩插泄| 97精品| 麻豆成人片| 人人爱人人操人人爽| 成人无码影院日韩,成人年…| 一级电影视频去去去| 人人爱天天做| 91小仙女jK白丝袜呻吟| 日韩欧美不卡| 操逼免费观看| 国产成人在线免费| 国产人妖在线| 亚洲婷婷三级成人网| 婷婷另类小说| 成人精品一区二区三区中文字幕 | 国产在线无码视频| 一区二区三区高清无码| 中文字幕欧美日韩| 国产欧美精品成人在线观看| 五月丁香六月激情| 能看的黄色视频| 手机在线毛片| 熟女综合| 成人毛片18女人毛片| 国产中文字幕亚洲综合欧美| 国产字幕在线观看| 91香蕉网| 在线免费看a| aaa久久| 国产精品久久久久久久久借妻| 免费视频久久久| 亚洲秘av无码一区二区| 国产福利91精品| 三级网址大全| 婷婷五月精品| 日韩一区二区免费视频| 日韩va| 最新中文字幕视频| 一区二区三区国产精品| 人人操成人| 91免费福利视频| 大香蕉做爱| 丰满欧美熟妇免费视频| 欧美在线成人网| 久久久久亚洲AV无码专区| 91福利视频网站| 超碰欧美| 激情五月婷婷网| 欧美午夜精品久久久久免费视| 久草网站| 麻豆性爱| 东京热av一区二区| 欧美一级黄| 好吊视频一区二区三区| 日韩AV中文字幕在线| 欧美一页| www.99免费视频| 秋霞丝鲁片一区二区三区手机在绒免| 蜜桃Av噜噜一区| 美女操B| 亚洲中文AV| 日韩在线中文字幕亚洲| 天天舔天天射| 在线有区别亚洲| 新亚洲天堂男子Av-| 99无码精品| 日韩激情AV| 亚洲人妻AV| 亚洲激情在线| 91人妻无码一区二区三区| 天天干视频在线| 自拍偷拍综合| av天堂小说网| 黄色视频一级| av在线无码| 午夜老司机福利一二三区| 中文字幕人妻系列| 婷婷五月激情网| 四川少妇搡bbbb搡bbbb| 日韩精品视频免费在线观看| 亚洲天堂无码AV| 九九成人视频| 鸡巴在线观看| 成人A片免费观看| 黄视频免费在线观看| 日韩精品网址| 无码777| 91国黄色毛片在线观看| 久久久91人妻无码精品蜜桃ID| 三级无码片| 97国产精品久久| 一牛影视精品av| 亚洲无码视频专区| 五月天婷婷影院| av一区在线观看| 高清视频一区二区| 444444免费高清在线观看电视剧的注意 | 丰满人妻无码| 四虎精品| 手机av网站| 中文字幕在线一区二区a| 精品国产乱子伦一区二区三区最新章 | 1024手机在线观看| 亚洲污| 又a又黄高清无码视频| 99精品国自产在线| 亚洲一级A片| 淫荡五月天视频导航| 好吊视频一区二区三区| 大鸡巴黄色视频免费观看| 亚洲第一成年人网站| 翔田千里无码XXXXXX| 欧美日韩国产成人在线观看| 黄色片网站免费观看| 操逼在线视频| 日韩精品中文无码| 在线中文av| 中文原创麻豆传媒md0052| 射死你天天日| 久久久久综合| 无套内射在线播放| 成人午夜视频在线观看| 2019中文字幕mv第三季歌词| 中文字幕2018第一页| 亚洲欧洲在线播放| 亚洲国产成人电影| 男人资源在线| 精品免费| 天天噜天天操| 天天色小说| 亚洲天堂视频在线播放| 亚洲秘一区二区三区-精品亚洲二区- | 操逼逼一区二区三区| 欧美性爱A| 欧美成人视频网站| 国产超碰青青草| 撸一撸在线视频| 97在线免费| 日韩在线视频免费| 乱伦无码| 亚洲系列中文字幕| A黄色片| 91在线观看免费视频| 日韩黄色在线| 成人国产精品秘欧美高清| 日韩成人一区二区| 丁香五月亚洲综合| 三级午夜在线无码| 欧美日韩国产一区二区| 欧美一区二区三区激情| 日韩午夜无码| 青青草超碰在线| 天天草夜夜操| 高清无码视频在线播放| 青青草原免费在线视频| 淫秽视频免费看| 五月丁香色播| 国产大奶一区二区| 黄色片视频| 欧美夜夜草视频| 2025av在线| 午夜黄色操逼视频| 精品视频91| 污视频在线免费| 91在线无码精品秘国产| 精品国产AV鲁一鲁一区| 麻豆网站| 精品免费一区二区三区四区 | 国产探花在线观看| AV免费网站| 777米奇视频| 激情久久久| 亚洲黄色成人| 三洞齐开Av在线免费观看| 天天摸天天日| 国产一级a毛一级a做免费的视频| 熟妇人妻中文AV| 日韩三级| 亚洲精品久久久久毛片A级绿茶| 蜜桃91精品秘入口内裤| 先锋影音成人| 午夜无码免费| 日韩欧美中文字幕在线观看| 黄色A片免费观看| 日本三级片在线| 天天撸一撸视频| 在线日韩| 日本免费一级片| 日日操网| 精品人妻中文字幕视频| 无码91| 日本免费A∨| 国产亚洲色婷婷| 韩国无码高清视频| 丁香久久| 各种BBwBBwBBwBBw| 99热在线看| 国语一区| 91青青草| 午夜激情久久| 大香蕉在线电影| 性满足BBWBBWBBW| 久操国产视频| 无码国产精品一区二区| 无码不卡在线| 一级一级a免一级a做免费线看内裤 | 天天日夜夜撸| 在线观看国产黄色| 丁香五月激情在线| 免费观看高清无码视频| 五月婷婷六月激情| 中文字幕在线播放视频| 亚洲一区二区三区免费视频| 青娱乐自拍视频| 97久久一区二区| 一级免费a片| 在线无码免费视频| 囯产精品一区二区三区线一牛影视1| 五月婷婷在线观看| AA毛片| 蜜桃av秘无码一区二区三区| 亚洲黄色精品| 亚洲成人在线无码| 天天毛片| 久久久久久国际四虎免费精品视频 | 美女黄色视频永费在线观看网站| 美女啪啪视频| 日韩不卡电影| 国产精品久久免费视频| 大色欧美| 国产Aⅴ| 欧美日在线观看| 日本在线一级片| 亚洲视频播放| 在线播放内射| 视频國产在线| 一区二区无码在线| 骚网站在线观看| 北条麻妃精品视频| 翔田千里無碼破解| 大香蕉久在线| 日本A片| 人人色视频| 成人黄色网| 少妇搡BBBB搡BBB搡18禁| 国产精品天天AVJ精麻传媒| 一级黄色电影网| 日皮视频在线| 男人的天堂一区| 日本A片一级| 日韩在线中文| 先锋影音麻豆| 国产三级片无码| 欧美日韩国产成人在线观看| 中文字幕乱伦性爱| 日韩一级网站| 成人h视频| AAA成人| 久久成人影音先锋| 国产在线观看欧美| 波多野成人无码精品69| 麻豆精品无码| 亚洲av性爱| 操逼视频国产| 开心五月色婷婷综合开心网| 乱子伦国产精品| 撸一撸AV| 中文字幕在线观看网| A亚洲天堂| 俺来也俺就去www色情网| 久久女人视频| 中国黄色学生妹一级片| 囯产一级a一级a免费视频| 日韩蜜桃视频| 精品一区二区三区av| 999日本不卡影院| 女人天堂av| 免费操B视频| 黄色电影中文字幕| 亚洲综合日韩| 91.xxxx| 国精品无码一区二区三区在线| 中文字字幕中文字幕乱码| 亚洲高清视频在线观看| 中文字幕第83页| 人妻人人澡| 青青草无码在线| 亚洲无码你懂的| 91成人视频| 日韩亚洲中文在线| 91天天射| 人妻天天操| 欧美色图在线观看视频| 菊花综合网| 无码一道本| 中国无码视频| 超碰在线无码| 亚洲九九视频| 免费版成人久久幺| 亚洲无码三级视频| 国产主播一区二区| 九月婷婷综合| 夜色福利在线看| 亚洲精品成人片在线观看精品字幕 | 天美精东蜜桃91| 中文字幕在线视频免费观看| 日韩成年视频| 伊人精品在线| 一级a性色毛片| 在线观看一区二区三区四区 | AA片在线观看视频在线播放| 波多野结衣亚洲无码| 久久无码高清视频| 91青青视频| 嘿咻无码推油| 苍井空二区| 狼友视频在线免费观看| 精品无码人妻一区二区媚黑| 国产AV电影网| 日本爱爱免费视频| 亚洲AV毛片| 欧美理论片在线观看| 一级黄色片在线观看| 国产色哟哟| 日韩少妇视频| 97人人爽人人爽人人人| 91免费福利| 国产精品午夜福利| 东京热视频一区| 青娱乐网| 操逼五月天| BBW老熟女BBw| 加勒比综合| 欧美69视频| 国产乱伦免费| 2025精品偷拍视频| 欧美一级二级三级| 悠悠AV导航| 免费亚洲视频| 中文一级片| 欧美操B视频| 天堂在线社区| 91视频www| 自拍欧美亚洲| 日韩欧美中文字幕视频| 俺来俺去www色婷婷| 国产AV资源| 午夜黄色福利| 大香蕉伊在线观看| 亚洲va在线va天堂va偷拍| 成人视频免费观看18| AV天堂免费播放| 人妻超碰在线| 91精品国产综合久久久蜜臀图片| 国产凹凸视频在线观看| 密桃视频网站| 91丨九色丨熟女泻火| 亚洲AV无码精品久久一区二区| 五月丁香六月婷婷综合| 51精品国产| AV在线精品| 操日本老女人| 精品一区二区三区四区| 四虎影院中文字幕| 大香蕉伊人网在线| gogogo免费高清在线偷拍| 午夜偷拍网站| 豆花视频在线播放| 狠狠操AV| 色色视频在线观看| 国产黄色视频在线观看免费| 日韩AV乱伦| 亚洲AV秘无码不卡在线观看| 96精品| 久久你懂的| 欧美三级一级| 久久免费视频播放| 大香蕉三级片| 蜜臀久久99精品久久久巴士| 天天操天天干麻豆| 无码色网| 欧美AⅤ在线| 午夜成人无码| 黄片久久| 高清无码色播| 欧美日韩中文在线观看| 在桌下含她的花蒂和舌头H视频| 日日骚av一区二区三区| 蜜桃视频成人app| 精品欧美无人区乱码毛片| 羽月希在线播放| 日本一区二区三区四区在线观看 | 丁香五月激情啪啪啪| 国产8区| 青娱乐91| 国产一级特黄aaa大片| 欧美精品无码| 88AV在线播放| AV一区二区在线观看| 欧美1区2区| 欧美一级欧美三级在线观看| 黄色A片免费观看| 狠狠干综合| 精品视频久久久久久| 撸一撸av| 91在线网址| 91人人爽| 四季AV一区二区凹凸懂色桃花 | 99成人乱码一区二区三区在线| 性猛交AAAA片免费观看直播| 大香蕉网在线| 亚洲欧美日韩久久| 日韩中文毛片| aa免费视频| 喷水视频在线观看| 亚洲免费成人网| 国产精品福利导航| 亚卅无码| 高清亚洲| 91精品在线观看视频| 免费黄色一级电影| 色综合久久久无码中文字幕999| AA丁香综合激情| 天天躁日日躁狠狠| 日韩在线视频一区二区三区| 亚洲欧美日韩高清| 91探花秘在线播放偷拍| 青榴社区| 国产在线视频一区二区| 激情无码国产| 国产精品tv| 人人草人人看| 男女视频网站| 欧美日韩高清在线| 日韩一级特黄A片免费观| 午夜精品无码| 91人妻无码一区二区三区| 欧美成人网站在线观看| 日本一区二区三区在线观看| 黄片av| 亚洲免费观看| 2026无码视频| 久久无码成人| 一区二区高清无码视频| 国产午夜福利免费视频在线观看| 视频國产在线| 日皮视频| 91综合视频在线播放| 91麻豆精品在线观看| 91大神在线观看入口| 婷婷丁香五月亚洲| 日韩AⅤ| 国产精品久久久久久久久夜色| 国产最新视频| 五月丁香伊人| 狠狠色婷婷7777| 一级性爱视频| 成人播放视频| A级黄色网| 欧美激情xxx| 黄色不卡视频| Av高清无码| 久久久久久五月天| 翔田千里在线播放| 京熱大亂交无碼大亂交| a片在线免费看| 91九色在线观看| 97人妻人人澡| 国产福利视频在线观看| AV日逼网| AV无码毛片| 亚洲综合免费观看高清完整版在线观| 久久久WWW成人免费无遮挡大片 | 欧美va在线| 毛片在线观看视频| 日韩精品一二三区| 国产精品成人无码免费| 日韩在线一区二区| 欧美日韩男女淫乱一区二区| 国内综合久久| 亚洲日韩在线a成| 国产一级片无码| 三级网址在线| 91蝌蚪在线观看| 亚洲第一免费视频| 69AV在线视频| 亚洲无码在线免费观看| 欧美激情色色| 国产一毛a一毛a在线观看| 久久久久久久久久久久国产精品| 蜜桃Av噜噜一区二区三区四区| 色色五月天视频| 蜜臀av在线观看| 黄色日逼片| 亚洲精品秘一区二区三线观看 | 殴美老妇BBBBBBBBB| 久久久久久精品国产三级| 北条麻妃在线精品| 欧美成人综合色| 亚洲欧美天堂| 99热在线观看免费精品| 日韩人妻精品无码| 无码av在线播放| 黄片一区| 国产一精品| 亚洲国产精品尤物yw在线观看| 免费自拍视频| 成人福利午夜A片公司| 一二区无码| 国产伦精品一区二区三区妓女| 免费av网站| 久久成人18免费网站波多野结衣| 日韩V片| 91看片看婬黄大片女跟女| 日本熟妇高潮BBwBBwBBw| 在线色片| 大香蕉网址| 三级片在线观看网站| aV无码av天天aV天天爽第一| 免费观看一级毛一片| 免费无码av| 操B网址| 国产精品一区在线观看| 大香蕉亚洲成人| 婷婷五月亚洲精品AAA片在| 日本精品在线播放| 国产办公室丝袜人妖| 日本黄色小视频| 天天操天天日天天干| 欧美精品无码久久久精品酒店| 7777精品伊人久久7777| 亚洲无码内射| 无码人妻精品一区二区三区蜜臀百度| 中文字幕一区二区久久人妻| 天天做天天干| 91丨PORNY丨在线中文| 精品国内视频| 欧美日韩国产激情| 黄网站免费在线观看| 99热在线免费观看| 北条麻妃精品青青久久价格| 欧美成a| 日本视频一区二区| 嫩草国产| 久久久久久久人妻丝袜| 丝袜天堂| www.天天射视频| 无码婬片A片AAA毛片艳谭| 中文字幕亚洲天堂| 黄色视频免费播放| 日韩十八禁| 福利视频网亚洲| 无码观看视频| 黄色草逼视频| 在线免费看AV| 天天爽夜夜爽夜夜爽精品视频| 五月天在线电影| 黄页av| 人妻熟女一区二区| 日韩黄色毛片| 德国肥妇熟妇BBwBBw| 亚洲AV秘无码不卡在线观看 | 91拍真实国产伦偷精品| 老司机AV91| 国产精品自拍在线观看| 天天爽天天日| 偷拍一区二区| 中文AV第一页| 9I成人免费版视频| 日本A片免费观看| 日韩视频免费| 女BBBBBB女BBB| av影音先锋在线| 成人精品视频在线| 成人免费无码婬片在线观看免费 | 操逼的视频| 色五月婷婷小说| 亚洲无码蜜桃| 午夜AV无码| 高清中字无码| 国产精品一| 久久极品| 91九九| 国产人妻精品一区二区三区不卡 | 国产一级操逼视频| 日韩无码视频一区| 国产精品无码乱伦| 日本电影一区二区三区| 蜜桃精品在线观看| 91视频在线| 亚洲综合99| 中文在线a∨在线| 欧美日韩黄| 青青操人人操| 在线观看成人18| 国产AⅤ爽aV久久久久成人| 久久久国产探花视频| 午夜久| 天天狠狠干| 天天操夜夜骑| 亚洲日本中文字幕在线| 最新黄色av| 日本久久电影| 夏目あきら被续侵犯7天| 免费无码网站| 免费无码成人片在线播放| 久久欧洲成人精品无码区| 一级AAAAA片裸体做受| 亚洲字幕无码| 日本熟女视频| 精品狼友| 91精品电影| 五月丁香六月| 唐嫣一级婬片A片AAA| 午夜精品影院| 久久精品99| 国产成人午夜视频| 中文一区| 免费黄色电影在线观看| 国产精品无| 九九精品视频在线播放| 国产三级网站| 免费福利视频网站| 999一区二区三区| 99精品视频免费观看| 久久撸在线视频| 黄色av免费观看| 黄片一区| 人人妻人人操人人干| 再深点灬好爽灬轻点久久国产| 人人色人人色| 影音先锋三级资源| 少妇白洁在线观看| 爆操太妹| 三级爱爱| 超碰人人射| 国产三级国产三级国产普通话| 蜜臀久久99精品久久久| 人人摸人人操人人| 欧美操B在线| 精品一区二区三区免费| 91在线无码| 日逼老女人| 久青草资源福利视频| 在线观看免费黄片| 日韩成人不卡| 牛牛影视av| 国产精品毛片A√一区| 色婷婷av在线| 国产传媒三级| 9l蝌蚪PORNY中文| 成人一卡二卡| 一插菊花综合网| 蜜臀AV在线观看|