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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaSE_day09【抽象类、多态、根父类】

發布時間:2024/1/18 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaSE_day09【抽象类、多态、根父类】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JavaSE_day09【抽象類、多態、根父類】

今日內容

  • 抽象類
  • 多態
  • 向上轉型
  • 向下轉型
  • native
  • 根父類

學習目標

  • 能夠聲明抽象類
  • 能夠說出抽象類的特點
  • 能夠繼承抽象類
  • 能夠應用多態解決問題
  • 理解向上轉型與向下轉型
  • 能夠使用instanceof關鍵字判斷對象類型
  • 了解native關鍵字
  • 了解Object類的常用方法
  • 會重寫Object的常用方法

第六章 面向對象基礎–中

6.8 抽象類

6.8.1 由來

抽象:即不具體、或無法具體

例如:當我們聲明一個幾何圖形類:圓、矩形、三角形類等,發現這些類都有共同特征:求面積、求周長、獲取圖形詳細信息。那么這些共同特征應該抽取到一個公共父類中。但是這些方法在父類中又無法給出具體的實現,而是應該交給子類各自具體實現。那么父類在聲明這些方法時,就只有方法簽名,沒有方法體,我們把沒有方法體的方法稱為抽象方法。Java語法規定,包含抽象方法的類必須是抽象類

6.8.2 語法格式

  • 抽象方法 : 沒有方法體的方法。
  • 抽象類:被abstract所修飾的類。

抽象類的語法格式

【權限修飾符】 abstract class 類名{} 【權限修飾符】 abstract class 類名 extends 父類{}

抽象方法的語法格式

【其他修飾符】 abstract 返回值類型 方法名(【形參列表】);

注意:抽象方法沒有方法體

代碼舉例:

public abstract class Animal {public abstract void run()} public class Cat extends Animal {public void run (){System.out.println("小貓在墻頭走~~~")} } public class CatTest {public static void main(String[] args) {// 創建子類對象Cat c = new Cat(); // 調用run方法c.run();} } 輸出結果: 小貓在墻頭走~~~

此時的方法重寫,是子類對父類抽象方法的完成實現,我們將這種方法重寫的操作,也叫做實現方法

6.8.3 注意事項

關于抽象類的使用,以下為語法上要注意的細節,雖然條目較多,但若理解了抽象的本質,無需死記硬背。

  • 抽象類不能創建對象,如果創建,編譯無法通過而報錯。只能創建其非抽象子類的對象。

    理解:假設創建了抽象類的對象,調用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。

  • 抽象類中,也有構造方法,是供子類創建對象時,初始化父類成員變量使用的。

    理解:子類的構造方法中,有默認的super()或手動的super(實參列表),需要訪問父類構造方法。

  • 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

    理解:未包含抽象方法的抽象類,目的就是不想讓調用者創建該類對象,通常用于某些特殊的類結構設計。

  • 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無法通過而報錯。除非該子類也是抽象類。

    理解:假設不重寫所有抽象方法,則類中可能包含抽象方法。那么創建對象后,調用抽象的方法,沒有意義。

  • 6.8.4 練習

    1、練習1

    定義一個幾何圖形父類Graphic。所有幾何圖形都應該具備一個計算面積的方法。但是不同的幾何圖形計算面積的方式完全不同。

    abstract class Graphic{public abstract double getArea(); } class Circle extends Graphic{private double radius;public Circle(double radius) {super();this.radius = radius;}public Circle() {super();}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}} class Rectangle extends Graphic{private double length;private double width;public Rectangle(double length, double width) {super();this.length = length;this.width = width;}public Rectangle() {super();}public double getLength() {return length;}public void setLength(double length) {this.length = length;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}@Overridepublic double getArea() {return length * width;} }

    2、練習2

    1、聲明抽象父類:Person,包含抽象方法:
    public abstract void walk();
    public abstract void eat();

    2、聲明子類Man,繼承Person
    重寫walk():大步流星走路
    重寫eat():狼吞虎咽吃飯
    新增方法:public void smoke()實現為吞云吐霧

    3、聲明子類Woman,繼承Person
    重寫walk():婀娜多姿走路
    重寫eat():細嚼慢咽吃飯
    新增方法:public void buy()實現為買買買…

    4、在測試類中創建子類對象,調用方法測試

    public abstract class Person {public abstract void walk();public abstract void eat(); } public class Man extends Person {@Overridepublic void walk() {System.out.println("大步流星走路");}@Overridepublic void eat() {System.out.println("狼吞虎咽吃飯");}public void smoke(){System.out.println("吞云吐霧");} } public class Woman extends Person {@Overridepublic void walk() {System.out.println("婀娜多姿走路");}@Overridepublic void eat() {System.out.println("細嚼慢咽吃飯");}public void buy(){System.out.println("買買買...");} } public class TestExer1 {public static void main(String[] args) {Man m = new Man();m.eat();m.walk();m.smoke();System.out.println("-------------------------");Woman w = new Woman();w.eat();w.walk();w.buy();}}

    6.9 多態

    6.9.1 引入

    多態是繼封裝、繼承之后,面向對象的第三大特性。

    生活中,比如求面積的功能,圓、矩形、三角形實現起來是不一樣的。跑的動作,小貓、小狗和大象,跑起來是不一樣的。再比如飛的動作,昆蟲、鳥類和飛機,飛起來也是不一樣的。可見,同一行為,通過不同的事物,可以體現出來的不同的形態。那么此時就會出現各種子類的類型。

    但是Java是強類型靜態語言,既每一個變量在使用之前必須聲明它確切的類型,然后之后的賦值和運算時都是嚴格按照這個數據類型來處理的。例如:

    int num = 10; String str = "hello"; Student stu = new Student();

    但是,有的時候,我們在設計一個數組、或一個方法的形參、返回值類型時,無法確定它具體的類型,只能確定它是某個系列的類型。

    例如:想要設計一個數組用來存儲各種圖形的對象,并且按照各種圖形的面積進行排序,但是具體存儲的對象可能有圓、矩形、三角形等,那么各種圖形的求面積方式又是不同的。

    例如:想要設計一個方法,它的功能是比較兩個圖形的面積大小,返回面積較大的那個圖形對象。那么此時形參和返回值類型是圖形類型,但是不知道它具體是哪一種圖形類型。

    Circle[] arr = new Circle[長度]; //只能裝圓形對象 Rectangle[] arr = new Rectangle[長度]; //只能裝矩形對象 //無法統一管理各種圖形對象,例如:給各種圖形對象按照面積排序//需要重載很多個方法,增加一種具體的圖形,就需要增加一個方法 public static Circle maxArea(Circle c1, Circle c2){//只能比較兩個圓對象} public static Rectangle maxArea(Rectangle r1, Rectangle r2){//只能比較兩個矩形對象}

    這個時候,Java就引入了多態。

    6.9.2 定義

    1、格式

    父類類型 變量名 = 子類對象;

    父類類型:指子類對象繼承的父類類型,或者實現的父接口類型。

    例如:

    class Person{private String name;private int age;Person(String name, int age){this.name = name;this.age = age;}public void speak(){System.out.println(name + "說:我今年" + age);} } class Man extends Person{Man(String name, int age){super(name,age);} } class Woman extends Person{Woman(String name, int age){super(name,age);} } class Test{public static void main(String[] args){Person[] arr = new Person[2];arr[0] = new Man("張三",23);arr[1] = new Woman("如花",18);for(int i=0; i<arr.length; i++){arr[i].speak();}System.out.println("------------------------");show(new Man("張三",23));show(new Woman("如花",18));}public static void show(Person p){p.speak();} }

    2、編譯時類型與運行時類型不一致問題

    • 編譯時,看“父類”,只能調用父類聲明的方法,不能調用子類擴展的方法;

    • 運行時,看“子類”,一定是執行子類重寫的方法體;

    代碼如下:

    定義父類:

    public abstract class Animal { public abstract void eat(); }

    定義子類:

    class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void catchMouse(){System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } }

    定義測試類:

    public class Test {public static void main(String[] args) {// 多態形式,創建對象Animal a1 = new Cat(); // 調用的是 Cat 的 eata1.eat(); //a1.catchMouse();//錯誤,catchMouse()是子類擴展的方法,父類中沒有/*多態引用,編譯時,看“父類”,只能調用父類聲明的方法;運行時,看“子類”,一定是執行子類重寫的方法體;*/// 多態形式,創建對象Animal a2 = new Dog(); // 調用的是 Dog 的 eata2.eat(); } }

    6.9.5 多態的應用

    1、多態參數

    實際開發的過程中,父類類型作為方法形式參數,傳遞子類對象給方法,進行方法的調用,更能體現出多態的擴展性與便利。代碼如下:

    定義父類:

    public abstract class Animal { public abstract void eat(); }

    定義子類:

    class Cat extends Animal { public void eat() { System.out.println("吃魚"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } }

    定義測試類:

    public class Test {public static void main(String[] args) {// 多態形式,創建對象Cat c = new Cat(); Dog d = new Dog(); // 調用showCatEat showCatEat(c);// 調用showDogEat showDogEat(d); /*以上兩個方法, 均可以被showAnimalEat(Animal a)方法所替代而執行效果一致*/showAnimalEat(c);showAnimalEat(d); }public static void showCatEat (Cat c){c.eat(); }public static void showDogEat (Dog d){d.eat();}public static void showAnimalEat (Animal a){a.eat();} }

    由于多態特性的支持,showAnimalEat方法的Animal類型,是Cat和Dog的父類類型,父類類型接收子類對象,當然可以把Cat對象和Dog對象,傳遞給方法。

    當eat方法執行時,多態規定,執行的是子類重寫的方法,那么效果自然與showCatEat、showDogEat方法一致,所以showAnimalEat完全可以替代以上兩方法。

    不僅僅是替代,在擴展性方面,無論之后再多的子類出現,我們都不需要編寫showXxxEat方法了,直接使用showAnimalEat都可以完成。

    所以,多態的好處,體現在,可以使程序編寫的更簡單,并有良好的擴展。

    2、多態數組

    例如:家里養了兩只貓,兩條狗,想要統一管理他們的對象,可以使用多態數組

    public class TestAnimal {public static void main(String[] args) {Animal[] all = new Animal[4];//可以存儲各種Animal子類的對象all[0] = new Cat();all[1] = new Cat();all[2] = new Dog();all[3] = new Dog();for (int i = 0; i < all.length; i++) {all[i].eat();//all[i]編譯時是Animal類型,運行時看存儲的是什么對象}} }

    6.9.6 多態練習

    練習1:

    (1)聲明抽象父類Traffic,包含抽象方法public abstract void drive()
    (2)聲明子類Car,Bicycle等,并重寫drive方法
    (3)在測試類的main中創建一個數組,有各種交通工具,遍歷調用drive()方法
    模擬馬路上跑的各種交通工具

    public abstract class Traffic {public abstract void drive(); } public class Car extends Traffic {@Overridepublic void drive() {System.out.println("滴滴滴...");} } public class Bicycle extends Traffic {@Overridepublic void drive() {System.out.println("蹬蹬蹬。。。");} } public class TestExer1 {public static void main(String[] args) {//右邊這些是用匿名對象,初始化數組Traffic[] arr = {new Car(),new Bicycle(),new Car(),new Bicycle()};for (int i = 0; i < arr.length; i++) {arr[i].drive();}} }

    練習2:

    (1)聲明一個抽象父類Person類,publ

    3ic abstract void toilet();
    (2)聲明一個子類Woman類,重寫方法
    (3)聲明一個子類Man類,重寫方法
    (4)在測試類中聲明一個方法,
    public static void goToToilet(Person p){
    p.toilet();
    }
    在main中,創建不同子類對象,調用goToToilet方法進行測試

    public abstract class Person {public abstract void toilet(); } public class Man extends Person {@Overridepublic void toilet() {System.out.println("站著..");} } public class Woman extends Person {@Overridepublic void toilet() {System.out.println("坐著..");} } public class TestPerson {public static void main(String[] args) {goToToilet(new Woman());//隱含了Person p = new Woman();goToToilet(new Man());//隱含了Person p = new Man();}public static void goToToilet(Person p){p.toilet();} }

    練習3:

    1、聲明一個父類Employee員工類型,有屬性,姓名(String)
    有方法,public abstract double earning() 用于返回實發工資
    public String getInfo():顯示姓名和實發工資

    2、聲明一個子類SalaryEmployee正式工,繼承父類Employee,增加屬性,薪資,工作日天數,請假天數
    重寫方法,public double earning()返回實發工資,實發工資 = 薪資 - 薪資/工作日天數 * 請假天數,

    3、聲明一個子類HourEmployee小時工,繼承父類Employee
    有屬性,工作小時數,每小時多少錢
    重寫方法,public double earning()返回實發工資, 實發工資 = 每小時多少錢 * 小時數

    4、聲明一個子類Manager經理,繼承SalaryEmployee,增加屬性:獎金比例
    重寫方法,public double earning()返回實發工資,實發工資 = (薪資 - 薪資/工作日天數 * 請假天數)*(1+獎金比例)

    5、你現在是財務,需要查看每個人的實發工資,并查看工資總額。
    聲明一個員工數組,存儲各種員工,并遍歷顯示他們的姓名和實發工資,并計算所有員工的工資總額

    public abstract class Employee {private String name;public Employee(String name) {super();this.name = name;}public Employee() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public abstract double earning();public String getInfo() {return "姓名:" + name + ",實發工資:" + earning();} } public class SalaryEmployee extends Employee {private double salary;private int workingDays;//工作日天數,private double offDays;//請假天數public SalaryEmployee() {super();}public SalaryEmployee(String name, double salary, int workingDays, double offDays) {super(name);this.salary = salary;this.workingDays = workingDays;this.offDays = offDays;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public int getWorkingDays() {return workingDays;}public void setWorkingDays(int workingDays) {this.workingDays = workingDays;}public double getOffDays() {return offDays;}public void setOffDays(double offDays) {this.offDays = offDays;}/** 重寫方法,public double earning()返回實發工資, 實發工資 = 薪資 - 薪資/工作日天數 * 請假天數*/@Overridepublic double earning() {return salary - salary/workingDays * offDays;}} public class HourEmployee extends Employee {private double moneyPerHour;private double hours;public HourEmployee() {super();}public HourEmployee(String name, double moneyPerHour, double hours) {super(name);this.moneyPerHour = moneyPerHour;this.hours = hours;}public double getMoneyPerHour() {return moneyPerHour;}public void setMoneyPerHour(double moneyPerHour) {this.moneyPerHour = moneyPerHour;}public double getHours() {return hours;}public void setHours(double hours) {this.hours = hours;}/** 重寫方法,public double earning()返回實發工資, 實發工資 = 每小時多少錢 * 小時數 */@Overridepublic double earning() {return moneyPerHour * hours;}} public class Manager extends SalaryEmployee {private double commisionPer;public Manager() {super();}public Manager(String name, double salary, int workingDays, double offDays, double commisionPer) {super(name, salary, workingDays, offDays);this.commisionPer = commisionPer;}public double getCommisionPer() {return commisionPer;}public void setCommisionPer(double commisionPer) {this.commisionPer = commisionPer;}@Overridepublic double earning() {return super.earning() * (1+commisionPer);} } public class TestEmployee {public static void main(String[] args) {Employee[] all = new Employee[3];all[0] = new HourEmployee("張三", 50, 50);all[1] = new SalaryEmployee("李四", 10000, 22, 1);all[2] = new Manager("老王", 20000, 22, 0, 0.3);double sum = 0;for (int i = 0; i < all.length; i++) {System.out.println(all[i].getInfo());sum += all[i].earning();}System.out.println("總額:" + sum);} }

    6.9.7 父子類之間的類型轉換

    1、向上轉型

    • 當父類引用指向一個子類對象時,便是向上轉型。這個過程是自動完成的

    使用格式:

    父類類型 變量名 = new 子類類型(); 如:Animal a = new Cat();

    注意:此時通過父類的變量就只能調用父類中有的方法,不能調用子類特有的方法了

    2、向下轉型

    • 向下轉型:父類類型向子類類型向下轉換的過程,這個過程是強制的。

    使用格式:

    子類類型 變量名 = (子類類型) 父類變量名;:Cat c =(Cat) a;

    為什么要向下轉型?

    當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤。也就是說,不能調用子類擁有,而父類沒有的方法。編譯都錯誤,更別說運行了。這也是多態給我們帶來的一點"小麻煩"。所以,想要調用子類特有的方法,必須做向下轉型。

    轉型演示,代碼如下:

    定義類:

    abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void catchMouse() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } public void watchHouse() { System.out.println("看家"); } }

    定義測試類:

    public class Test {public static void main(String[] args) {// 向上轉型 Animal a = new Cat(); a.eat(); // 調用的是 Cat 的 eat// 向下轉型 Cat c = (Cat)a; c.catchMouse(); // 調用的是 Cat 的 catchMouse} }

    3、轉型的異常:ClassCastException

    轉型的過程中,一不小心就會遇到這樣的問題,請看如下代碼:

    public class Test {public static void main(String[] args) {// 向上轉型 Animal a = new Cat(); a.eat(); // 調用的是 Cat 的 eat// 向下轉型 Dog d = (Dog)a; d.watchHouse(); // 調用的是 Dog 的 watchHouse 【運行報錯】} }

    這段代碼可以通過編譯,但是運行時,卻報出了 ClassCastException ,類型轉換異常!這是因為,明明創建了Cat類型對象,運行時,當然不能轉換成Dog對象的。這兩個類型并沒有任何繼承關系,不符合類型轉換的定義。

    注意:不管是向上還是向下轉型都只是針對編譯時類型來說的,不是真的類型轉換,即運行時類型不變,一開始new的是什么類型還是什么類型。

    4、instanceof運算符

    為了避免ClassCastException的發生,Java提供了 instanceof 關鍵字,給引用變量做類型的校驗,只要用instanceof判斷返回true的,那么強轉為該類型就一定是安全的,不會報ClassCastException異常。

    格式如下:

    變量名/對象 instanceof 數據類型 如果變量/對象屬于該數據類型,返回true。 如果變量/對象不屬于該數據類型,返回false

    所以,轉換前,我們最好先做一個判斷,代碼如下:

    public class Test {public static void main(String[] args) {// 向上轉型 Animal a = new Cat(); a.eat(); // 調用的是 Cat 的 eat// 向下轉型 if (a instanceof Cat){Cat c = (Cat)a; c.catchMouse(); // 調用的是 Cat 的 catchMouse} else if (a instanceof Dog){Dog d = (Dog)a; d.watchHouse(); // 調用的是 Dog 的 watchHouse}} }

    哪些情況下instanceof判斷返回true

    示例代碼:

    class Person{//方法代碼省略... } class Woman extends Person{//方法代碼省略... } class ChineseWoman extends Woman{//方法代碼省略... } public class Test{public static void main(String[] args){Person p1 = new Person();Person p2 = new Woman();Person p3 = new ChineseWoman();if(p1 instanceof Woman){//false}if(p2 instanceof Woman){//true//p2轉為Woman類型安全}if(p3 instanceof Woman){//true//p3轉為Woman類型安全}}}

    5、練習

    1、聲明一個父類Employee員工類型,
    有屬性,姓名(String),出生日期(MyDate類型,也是自定義的含年,月,日屬性日期類型)
    有方法,public abstract double earning()
    public String getInfo():顯示姓名和實發工資

    2、聲明一個子類SalaryEmployee正式工,繼承父類Employee
    增加屬性,薪資,工作日天數,請假天數
    重寫方法,public double earning()返回實發工資, 實發工資 = 薪資 - 薪資/工作日天數 * 請假天數,
    重寫方法,public String getInfo():顯示姓名和實發工資,月薪,工作日天數,請假天數

    3、聲明一個子類HourEmployee小時工,繼承父類Employee
    有屬性,工作小時數,每小時多少錢
    重寫方法,public double earning()返回實發工資, 實發工資 = 每小時多少錢 * 小時數
    重寫方法,public String getInfo():顯示姓名和實發工資,時薪,工作小時數
    增加方法,public void leave():打印查看使用工具是否損壞,需要賠償

    4、聲明一個子類Manager經理,繼承SalaryEmployee
    增加屬性:獎金,獎金比例
    重寫方法,public double earning()返回實發工資, 實發工資 = (薪資 - 薪資/工作日天數 * 請假天數)*(1+獎金比例)
    重寫方法,public String getInfo():顯示姓名和實發工資,月薪,工作日天數,請假天數,獎金比例

    5、聲明一個員工數組,存儲各種員工,
    你現在是人事,從鍵盤輸入當前的月份,需要查看每個人的詳細信息。
    如果他是正式工(包括SalaryEmployee和Manager),并且是本月生日的,祝福生日快樂,通知領取生日禮物。如果是HourEmployee顯示小時工,就進行完工檢查,即調用leave方法

    public abstract class Employee {private String name;private MyDate birthday;public Employee(String name, MyDate birthday) {super();this.name = name;this.birthday = birthday;}public Employee(String name, int year, int month, int day) {super();this.name = name;this.birthday = new MyDate(year, month, day);}public Employee() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public MyDate getBirthday() {return birthday;}public void setBirthday(MyDate birthday) {this.birthday = birthday;}public abstract double earning();public String getInfo(){return "姓名:" + name + ",生日:" + birthday.getInfo() +",實發工資:" + earning();} } public class SalaryEmployee extends Employee {private double salary;private int workingDays;//工作日天數,private double offDays;//請假天數public SalaryEmployee() {super();}public SalaryEmployee(String name, int year, int month, int day, double salary, int workingDays, double offDays) {super(name, year, month, day);this.salary = salary;this.workingDays = workingDays;this.offDays = offDays;}public SalaryEmployee(String name, MyDate birthday, double salary, int workingDays, double offDays) {super(name, birthday);this.salary = salary;this.workingDays = workingDays;this.offDays = offDays;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public int getWorkingDays() {return workingDays;}public void setWorkingDays(int workingDays) {this.workingDays = workingDays;}public double getOffDays() {return offDays;}public void setOffDays(double offDays) {this.offDays = offDays;}/** 重寫方法,public double earning()返回實發工資, 實發工資 = 薪資 - 薪資/工作日天數 * 請假天數*/@Overridepublic double earning() {return salary - salary/workingDays * offDays;}@Overridepublic String getInfo() {return super.getInfo() + ",月薪:" + salary + ",工作日:" + workingDays +",請假天數:" + offDays;} } public class HourEmployee extends Employee {private double moneyPerHour;private double hours;public HourEmployee() {super();}public HourEmployee(String name, int year, int month, int day, double moneyPerHour, double hours) {super(name, year, month, day);this.moneyPerHour = moneyPerHour;this.hours = hours;}public HourEmployee(String name, MyDate birthday, double moneyPerHour, double hours) {super(name, birthday);this.moneyPerHour = moneyPerHour;this.hours = hours;}public double getMoneyPerHour() {return moneyPerHour;}public void setMoneyPerHour(double moneyPerHour) {this.moneyPerHour = moneyPerHour;}public double getHours() {return hours;}public void setHours(double hours) {this.hours = hours;}/** 重寫方法,public double earning()返回實發工資, 實發工資 = 每小時多少錢 * 小時數 */@Overridepublic double earning() {return moneyPerHour * hours;}@Overridepublic String getInfo() {return super.getInfo() + ",時薪:" + moneyPerHour + ",小時數:" + hours;}public void leave(){System.out.println("小時工,查看使用工具是否損壞,需要賠償,然后拿錢走人");} } public class Manager extends SalaryEmployee {private double commisionPer;public Manager() {super();}public Manager(String name, int year, int month, int day, double salary, int workingDays, double offDays,double commisionPer) {super(name, year, month, day, salary, workingDays, offDays);this.commisionPer = commisionPer;}public Manager(String name, MyDate birthday, double salary, int workingDays, double offDays, double commisionPer) {super(name, birthday, salary, workingDays, offDays);this.commisionPer = commisionPer;}public double getCommisionPer() {return commisionPer;}public void setCommisionPer(double commisionPer) {this.commisionPer = commisionPer;}@Overridepublic double earning() {return super.earning() * (1+commisionPer);}@Overridepublic String getInfo() {return super.getInfo() + ",獎金比例:" + commisionPer;} } public class TestEmployee {public static void main(String[] args) {Employee[] all = new Employee[3];/*all[0] = new HourEmployee("張三", new MyDate(1990, 5, 1), 50, 50);all[1] = new SalaryEmployee("李四", new MyDate(1991, 1, 1), 10000, 22, 1);all[2] = new Manager("老王", new MyDate(1987, 12, 8), 20000, 22, 0, 0.3);*/all[0] = new HourEmployee("張三", 1990, 5, 1, 50, 50);all[1] = new SalaryEmployee("李四", 1991, 1, 1, 10000, 22, 1);all[2] = new Manager("老王", 1987, 12, 8, 20000, 22, 0, 0.3);//從鍵盤輸入當前的月份Scanner input = new Scanner(System.in);System.out.print("請輸入當前月份:");int month;while(true){month = input.nextInt();if(month>=1 && month<=12){break;}}input.close();for (int i = 0; i < all.length; i++) {System.out.println(all[i].getInfo());if(all[i] instanceof SalaryEmployee){if(month == all[i].getBirthday().getMonth()){System.out.println(all[i].getName() +"生日快樂,領取生日補助購物卡");}}else{HourEmployee he = (HourEmployee) all[i];he.leave();}}} }

    6.9.8 多態引用時關于成員變量與成員方法引用的原則

    1、成員變量:只看編譯時類型

    如果直接訪問成員變量,那么只看編譯時類型

    public class TestField {public static void main(String[] args) {Father f = new Son();System.out.println(f.x);//只看編譯時類型} } class Father{int x = 1; } class Son extends Father{int x = 2; }

    2、非虛方法:只看編譯時類型

    如果方法在編譯期就確定了具體的調用版本,這個版本在運行時是不可變的,這樣的方法稱為非虛方法。其他方法稱為虛方法。

    • 靜態方法、私有方法、final方法、實例構造器、通過super調用的父類方法都是非虛方法。
      • 靜態方法與類型直接關聯
      • 私有方法在外部不可訪問
      • final不可被繼承
    public class TestField {public static void main(String[] args) {Father f = new Son();f.test();//只看編譯時類型} } class Father{public static void test(){System.out.println("father");} } class Son extends Father{public static void test(){System.out.println("son");} }

    小貼士:

    靜態方法不能被重寫

    調用靜態方法最好使用“類名.”

    3、虛方法:靜態分派與動態綁定

    (1)示例一:重寫
    abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃魚"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } }public class Test{public static void main(String[] args){Animal a = new Cat();a.eat();} }

    如上代碼在編譯期間先進行靜態分派:即確定是調用Animal類中的public void eat()方法,如果Animal類或它的父類中沒有這個方法,將會報錯。

    而在運行期間動態的在進行動態分派:即確定執行的是Cat類中的public void eat()方法,因為子類重寫了eat()方法,如果沒有重寫,那么還是執行Animal類在的eat()方法

    (2)示例二:重載
    class MyClass{public void method(Father f) {System.out.println("father");}public void method(Son s) {System.out.println("son");}public void method(Daughter f) {System.out.println("daughter");} } class Father{} class Son extends Father{} class Daughter extends Father{} public class TestOverload {public static void main(String[] args) {MyClass my = new MyClass();Father f = new Father();Father s = new Son();Father d = new Daughter();my.method(f);//fathermy.method(s);//fathermy.method(d);//father} }

    如上代碼在編譯期間先進行靜態分派:即確定是調用MyClass類中的method(Father f)方法,如果Animal類或它的父類中沒有這個方法,將會報錯。

    而在運行期間動態的在進行動態分派:即確定執行的是MyClass類中的method(Father f)方法,因為my對象的運行時類型還是MyClass類型。

    有些同學會疑問,不是應該分別執行method(Father f)、method(Son s)、method(Daughter d)嗎?

    因為此時f,s,d編譯時類型都是Father類型,因此method(Father f)是最合適的。

    (3)示例三:重載
    class MyClass{public void method(Father f) {System.out.println("father");}public void method(Son s) {System.out.println("son");} } class Father{} class Son extends Father{} class Daughter extends Father{} public class TestOverload {public static void main(String[] args) {MyClass my = new MyClass();Father f = new Father();Son s = new Son();Daughter d = new Daughter();my.method(f);//fathermy.method(s);//sonmy.method(d);//father} }

    如上代碼在編譯期間先進行靜態分派:即確定是分別調用MyClass類中的method(Father f),method(Son s),method(Father f)方法。

    而在運行期間動態的在進行動態分派:即確定執行的是MyClass類中的method(Father f),method(Son s),method(Father f)方法,因為my對象的運行時類型還是MyClass類型。

    有些同學會疑問,這次為什么分別執行method(Father f)、method(Son s)?

    因為此時f,s,d編譯時類型分別是Father、Son、Daughter,而Daughter只能與Father參數類型匹配

    (4)示例四:重載與重寫
    class MyClass{public void method(Father f) {System.out.println("father");}public void method(Son s) {System.out.println("son");} } class MySub extends MyClass{public void method(Daughter d) {System.out.println("daughter");} } class Father{} class Son extends Father{} class Daughter extends Father{} public class TestOverload {public static void main(String[] args) {MyClass my = new MySub();Father f = new Father();Son s = new Son();Daughter d = new Daughter();my.method(f);//fathermy.method(s);//sonmy.method(d);//father} }

    如上代碼在編譯期間先進行靜態分派:即確定是分別調用MyClass類中的method(Father f),method(Son s),method(Father f)方法。

    而在運行期間動態的在進行動態分派:即確定執行的是MyClass類中的method(Father f),method(Son s),method(Father f)方法。

    有些同學會疑問,my對象不是MySub類型嗎,而MySub類型中有method(Daughter d)方法,那么my.method(d)語句應該執行MySub類型中的method(Daughter d)方法?

    • my變量在編譯時類型是MyClass類型,那么在MyClass類中,只有method(Father f),method(Son s)方法,

    • f,s,d變量編譯時類型分別是Father、Son、Daughter,而Daughter只能與Father參數類型匹配

    • 而在MySub類中并沒有重寫method(Father f)方法,所以仍然執行MyClass類中的method(Father f)方法

    (5)結論

    方法的分派有兩個需要考慮的因素:

    • 方法的參數:在編譯期間確定,根據編譯器時類型,找最匹配的

    • 方法的所有者:

      • 如果沒有重寫,就按照編譯時類型處理
      • 如果有重寫,就按照運行時類型處理

    6.10 native關鍵字

    native:本地的,原生的
    用法:

    ? 只能修飾方法

    ? 表示這個方法的方法體代碼不是用Java語言實現的,而是由C/C++語言編寫的。

    ? 但是對于Java程序員來說,可以當做Java的方法一樣去正常調用它,或者子類重寫它。

    JVM內存的管理:

    區域名稱作用
    程序計數器程序計數器是CPU中的寄存器,它包含每一個線程下一條要執行的指令的地址
    本地方法棧當程序中調用了native的本地方法時,本地方法執行期間的內存區域
    方法區存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
    堆內存存儲對象(包括數組對象),new來創建的,都存儲在堆內存。
    虛擬機棧用于存儲正在執行的每個Java方法的局部變量表等。局部變量表存放了編譯期可知長度的各種基本數據類型、對象引用,方法執行完,自動釋放。

    修飾符一起使用問題?

    外部類成員變量代碼塊構造器方法局部變量
    public××
    protected×××
    private×××
    static×××
    final××
    abstract××××
    native×××××

    不能和abstract一起使用的修飾符?

    (1)abstract和final不能一起修飾方法和類

    (2)abstract和static不能一起修飾方法

    (3)abstract和native不能一起修飾方法

    (4)abstract和private不能一起修飾方法

    static和final一起使用:

    (1)修飾方法:可以,因為都不能被重寫

    (2)修飾成員變量:可以,表示靜態常量

    (3)修飾局部變量:不可以,static不能修飾局部變量

    (4)修飾代碼塊:不可以,final不能修改代碼塊

    (5)修飾內部類:可以一起修飾成員內部類,不能一起修飾局部內部類(后面講)

    6.11 Object根父類

    6.11.1 如何理解根父類

    類 java.lang.Object是類層次結構的根類,即所有類的父類。每個類都使用 Object 作為超類。

    • Object類型的變量與除Object以外的任意引用數據類型的對象都多態引用
    • 所有對象(包括數組)都實現這個類的方法。
    • 如果一個類沒有特別指定父類,那么默認則繼承自Object類。例如:
    public class MyClass /*extends Object*/ {// ... }

    6.11.2 Object類的API

    ? API(Application Programming Interface),應用程序編程接口。Java API是一本程序員的字典 ,是JDK中提供給我們使用的類的說明文檔。所以我們可以通過查詢API的方式,來學習Java提供的類,并得知如何使用它們。在API文檔中是無法得知這些類具體是如何實現的,如果要查看具體實現代碼,那么我們需要查看src源碼

    ? 根據JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。今天我們主要學習其中的5個:

    (1)toString()

    public String toString()

    ①默認情況下,toString()返回的是“對象的運行時類型 @ 對象的hashCode值的十六進制形式"

    ②通常是建議重寫,如果在eclipse中,可以用Alt +Shift + S–>Generate toString()

    ③如果我們直接System.out.println(對象),默認會自動調用這個對象的toString()

    因為Java的引用數據類型的變量中存儲的實際上時對象的內存地址,但是Java對程序員隱藏內存地址信息,所以不能直接將內存地址顯示出來,所以當你打印對象時,JVM幫你調用了對象的toString()。

    例如自定義的Person類:

    public class Person { private String name;private int age;@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}// 省略構造器與Getter Setter }

    (2)getClass()

    public final Class<?> getClass():獲取對象的運行時類型

    因為Java有多態現象,所以一個引用數據類型的變量的編譯時類型與運行時類型可能不一致,因此如果需要查看這個變量實際指向的對象的類型,需要用getClass()方法

    public static void main(String[] args) {Object obj = new String();System.out.println(obj.getClass());//運行時類型}

    (3)finalize()

    protected void finalize():用于最終清理內存的方法

    public class TestFinalize {public static void main(String[] args) {for (int i = 0; i < 10; i++) {MyData my = new MyData();}System.gc();//通知垃圾回收器來回收垃圾try {Thread.sleep(2000);//等待2秒再結束main,為了看效果} catch (InterruptedException e) {e.printStackTrace();}} } class MyData{@Overrideprotected void finalize() throws Throwable {System.out.println("輕輕的我走了...");}}

    面試題:對finalize()的理解?

    • 當對象被GC確定為要被回收的垃圾,在回收之前由GC幫你調用這個方法,不是由程序員手動調用。

    • 這個方法與C語言的析構函數不同,C語言的析構函數被調用,那么對象一定被銷毀,內存被回收,而finalize方法的調用不一定會銷毀當前對象,因為可能在finalize()中出現了讓當前對象“復活”的代碼

    • 每一個對象的finalize方法只會被調用一次。

    • 子類可以選擇重寫,一般用于徹底釋放一些資源對象,而且這些資源對象往往時通過C/C++等代碼申請的資源內存

    (4)hashCode()

    public int hashCode():返回每個對象的hash值。

    hashCode 的常規協定:

    • ①如果兩個對象的hash值是不同的,那么這兩個對象一定不相等;
    • ②如果兩個對象的hash值是相同的,那么這兩個對象不一定相等。

    主要用于后面當對象存儲到哈希表等容器中時,為了提高存儲和查詢性能用的。

    public static void main(String[] args) {System.out.println("Aa".hashCode());//2112System.out.println("BB".hashCode());//2112}

    (5)equals()

    public boolean equals(Object obj):用于判斷當前對象this與指定對象obj是否“相等”

    ①默認情況下,equals方法的實現等價于與“==”,比較的是對象的地址值

    ②我們可以選擇重寫,重寫有些要求:

    A:如果重寫equals,那么一定要一起重寫hashCode()方法,因為規定:

    ? a:如果兩個對象調用equals返回true,那么要求這兩個對象的hashCode值一定是相等的;

    ? b:如果兩個對象的hashCode值不同的,那么要求這個兩個對象調用equals方法一定是false;

    ? c:如果兩個對象的hashCode值相同的,那么這個兩個對象調用equals可能是true,也可能是false

    B:如果重寫equals,那么一定要遵循如下幾個原則:

    ? a:自反性:x.equals(x)返回true

    ? b:傳遞性:x.equals(y)為true, y.equals(z)為true,然后x.equals(z)也應該為true

    ? c:一致性:只要參與equals比較的屬性值沒有修改,那么無論何時調用結果應該一致

    ? d:對稱性:x.equals(y)與y.equals(x)結果應該一樣

    ? e:非空對象與null的equals一定是false

    class User{private String host;private String username;private String password;public User(String host, String username, String password) {super();this.host = host;this.username = username;this.password = password;}public User() {super();}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [host=" + host + ", username=" + username + ", password=" + password + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((host == null) ? 0 : host.hashCode());result = prime * result + ((password == null) ? 0 : password.hashCode());result = prime * result + ((username == null) ? 0 : username.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (host == null) {if (other.host != null)return false;} else if (!host.equals(other.host))return false;if (password == null) {if (other.password != null)return false;} else if (!password.equals(other.password))return false;if (username == null) {if (other.username != null)return false;} else if (!username.equals(other.username))return false;return true;}}

    ate String host;
    private String username;
    private String password;
    public User(String host, String username, String password) {
    super();
    this.host = host;
    this.username = username;
    this.password = password;
    }
    public User() {
    super();
    }
    public String getHost() {
    return host;
    }
    public void setHost(String host) {
    this.host = host;
    }
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    @Override
    public String toString() {
    return “User [host=” + host + “, username=” + username + “, password=” + password + “]”;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((host == null) ? 0 : host.hashCode());
    result = prime * result + ((password == null) ? 0 : password.hashCode());
    result = prime * result + ((username == null) ? 0 : username.hashCode());
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    User other = (User) obj;
    if (host == null) {
    if (other.host != null)
    return false;
    } else if (!host.equals(other.host))
    return false;
    if (password == null) {
    if (other.password != null)
    return false;
    } else if (!password.equals(other.password))
    return false;
    if (username == null) {
    if (other.username != null)
    return false;
    } else if (!username.equals(other.username))
    return false;
    return true;
    }

    }

    總結

    以上是生活随笔為你收集整理的JavaSE_day09【抽象类、多态、根父类】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    欧美日韩国产一区 | 亚洲精品午夜久久久久久久 | 人人看黄色 | 国产精品久久久久av免费 | 色播五月激情综合网 | 国产福利专区 | 成人午夜剧场在线观看 | 啪嗒啪嗒免费观看完整版 | 精品v亚洲v欧美v高清v | 91免费版在线观看 | 日韩在线视频一区二区三区 | 天天玩天天干天天操 | 91手机在线看片 | 天天干天天干天天干天天干天天干天天干 | 国产经典三级 | 337p日本欧洲亚洲大胆裸体艺术 | 午夜精品99久久免费 | 日日草夜夜操 | 久久精品久久久久久久 | 精品伦理一区二区三区 | www激情网| 亚洲网站在线看 | 婷婷国产一区二区三区 | 香蕉视频久久久 | 五月天视频网站 | 91在线小视频 | 日日精品 | 色综合狠狠干 | 成人av一区二区三区 | 亚洲欧美999 | 国产一区国产二区在线观看 | 综合精品久久久 | 天堂av影院| 久久久久久国产精品免费 | 亚洲观看黄色网 | 久久免费黄色网址 | 99国产精品久久久久久久久久 | 中文字幕丝袜美腿 | 国产特级毛片aaaaaa高清 | 免费观看视频黄 | 人成免费网站 | 午夜精品一二三区 | 久久久久久久免费观看 | 亚洲视频中文 | 国产亚洲久一区二区 | 中文字幕 影院 | 18国产精品白浆在线观看免费 | 国产一级免费电影 | 国产一在线精品一区在线观看 | 黄色毛片在线观看 | 久久九九国产精品 | 久草在线在线精品观看 | 黄网站色视频免费观看 | 偷拍区另类综合在线 | 欧美成人h版在线观看 | 久久久激情视频 | 国产小视频网站 | 在线中文字母电影观看 | 婷婷综合国产 | 在线视频你懂 | 中文字幕在线久一本久 | 久久99亚洲网美利坚合众国 | 黄色大片免费播放 | 亚洲精品视频在线观看免费视频 | 日韩久久激情 | 中国一级片免费看 | 久久久久久电影 | 国产精品美女久久久久久久 | 西西大胆啪啪 | 国产精品乱码久久久久 | 精品久久久久久久久久久久久久久久久久 | 最近2019中文免费高清视频观看www99 | 亚洲草视频 | 婷婷丁香色综合狠狠色 | 欧美在线18 | 精品三级av | 久久综合九色综合久久久精品综合 | 狠狠干2018| 成人国产精品久久久春色 | 91精品国产一区二区三区 | 国产最新精品视频 | 亚洲aaa级 | 国产精品久久久久久久久久三级 | 性色av一区二区三区在线观看 | www九九热 | 亚洲视频综合 | 韩国av永久免费 | 免费黄色在线播放 | 亚州精品天堂中文字幕 | 国产精品免费久久久 | 97热视频 | 免费麻豆视频 | 亚洲精品久久久久中文字幕m男 | 狠狠干婷婷色 | 日韩久久久久久久久久久久 | 日韩精品专区在线影院重磅 | 国产精品久久久久久吹潮天美传媒 | 中文字幕视频一区二区 | 波多野结依在线观看 | 欧美 日韩 视频 | 精品99免费 | 国产色婷婷精品综合在线手机播放 | 四虎国产精品成人免费影视 | 国产在线播放一区二区三区 | 激情av在线播放 | 国产精品久久二区 | 亚洲精品高清一区二区三区四区 | 成人中文字幕+乱码+中文字幕 | 中文字幕一区在线 | 中文字幕在线观看91 | 日日操夜夜操狠狠操 | 99视频国产在线 | 亚洲精品久久久久中文字幕m男 | 毛片在线播放网址 | 免费看黄电影 | av丝袜在线| 成人精品久久 | 波多野结衣在线中文字幕 | 香蕉在线观看视频 | 欧美日韩高清在线 | 日韩一级黄色大片 | 92中文资源在线 | 欧美另类亚洲 | 不卡国产在线 | 永久免费精品视频 | 国产成人久久精品77777综合 | 亚洲成人免费观看 | 综合色在线 | 丁香 婷婷 激情 | 亚洲视频每日更新 | 日日夜精品 | 亚欧日韩成人h片 | 欧美高清视频不卡网 | 五月天婷婷在线观看视频 | 尤物九九久久国产精品的分类 | 国产一区二区电影在线观看 | 国产黄色片免费 | 久久成熟 | 亚洲第一区精品 | 一级片免费观看视频 | 去看片 | 国内丰满少妇猛烈精品播 | 婷婷网在线 | 日一日操一操 | a√国产免费a| 国产亚洲精品久久网站 | 亚洲国内精品视频 | 99热在线免费观看 | 五月天色丁香 | 三级性生活视频 | 国产福利久久 | 五月天亚洲综合小说网 | 国产福利中文字幕 | 久久1电影院 | 黄色片毛片 | 成人av电影免费在线播放 | 99精品国产一区二区三区不卡 | 天天操狠狠操夜夜操 | 久久一区国产 | www.狠狠 | 免费一级片视频 | 中文字幕区| 91麻豆免费视频 | 91中文字幕永久在线 | 国产99精品在线观看 | 在线观看一级视频 | 伊人手机在线 | 国产aaa大片| 国产成人91 | 日韩系列在线观看 | 久久人人爽人人爽人人片av软件 | 久久久www成人免费毛片麻豆 | 一本色道久久精品 | 日本少妇视频 | 91在线精品一区二区 | 国产99久久九九精品 | 免费观看成年人视频 | 99精品在线视频观看 | 波多野结衣精品视频 | 不卡的av在线播放 | 精品综合久久 | 在线免费观看一区二区三区 | 久久久久久久久久久久影院 | 亚洲国产精品成人va在线观看 | 久久一区二区三区日韩 | 亚洲精品国内 | 国产精品色视频 | 亚洲精品午夜视频 | 99久久国产免费,99久久国产免费大片 | 国产成人av网站 | 日韩深夜在线观看 | 久久99精品久久久久久秒播蜜臀 | 亚洲区另类春色综合小说 | 狠狠躁夜夜a产精品视频 | www.色就是色| 国产色区 | 成人久久久电影 | 日韩电影一区二区三区在线观看 | 四虎在线免费观看 | 亚洲黄色免费在线 | 日韩一区二区三区高清免费看看 | 成人午夜性影院 | 97小视频 | 五月天狠狠操 | 91九色视频在线 | 美女免费视频观看网站 | 狠狠久久婷婷 | 欧美日韩二三区 | 中文字幕制服丝袜av久久 | 国产又粗又猛又黄 | 国产流白浆高潮在线观看 | 国产区第一页 | 在线观看电影av | 十八岁免进欧美 | 日韩.com | 91麻豆精品国产自产在线游戏 | 九色porny真实丨国产18 | 国产在线黄 | 草久视频在线观看 | 日本二区三区在线 | 综合久久网站 | 麻豆系列在线观看 | 欧美va天堂va视频va在线 | 精品一区二区久久久久久久网站 | 天天射色综合 | 精品视频久久 | 91麻豆精品 | 天天天在线综合网 | 久久免费高清 | 午夜视频在线观看一区二区三区 | 久久久人 | 麻豆成人小视频 | 456成人精品影院 | 久久字幕精品一区 | 国产视频在线观看免费 | 日韩在线免费播放 | 97狠狠操 | 91资源在线 | 国产婷婷视频在线 | 国产传媒中文字幕 | 日韩欧美在线一区二区 | 少妇高潮流白浆在线观看 | 久久免费视频网 | 色综合在 | 欧美极品少妇xxxx | 一区二区视频在线观看免费 | 97在线视频免费 | 成人午夜网 | 91视频高清完整版 | 久草线 | a级国产乱理论片在线观看 特级毛片在线观看 | 国产日韩视频在线 | 激情在线五月天 | 精品v亚洲v欧美v高清v | 国产精品18久久久久久久 | 国产精品成人在线 | 免费看片黄色 | 丁香视频全集免费观看 | 国产成人精品一区二区在线观看 | 激情综合久久 | 97色免费视频 | 91视频a| 在线观看免费一级片 | 欧美一区二视频在线免费观看 | 亚洲国产美女久久久久 | 亚洲精品视频偷拍 | 午夜精品久久久久久久久久 | 日韩在线视频不卡 | 亚洲人在线| 福利一区二区在线 | 91精品国产一区 | 婷婷丁香色综合狠狠色 | 99在线观看视频网站 | 免费精品在线 | 亚洲视频 一区 | 国际精品久久久 | 免费a v在线| 国产不卡高清 | 国产精品96久久久久久吹潮 | 中国一 片免费观看 | 97国产精品一区二区 | 日日操天天操夜夜操 | www.久热| 国产精品日韩在线 | av免费在线网| 亚洲激情综合网 | 久久久久国产成人免费精品免费 | 成在线播放 | 国产精品女 | 99在线视频免费观看 | 最近中文字幕国语免费av | 日韩黄色软件 | 成人免费一区二区三区在线观看 | 成人午夜精品久久久久久久3d | 成人在线观看免费视频 | 天天综合导航 | 免费h在线观看 | 成人羞羞视频在线观看免费 | 天天综合网入口 | 国产96精品 | 国产91小视频 | 久草免费在线 | 一级片在线 | 色片网站在线观看 | 天天爱天天操 | 草樱av | 欧美极品一区二区三区 | 4hu视频| 911亚洲精品第一 | 欧美一级性生活视频 | 亚洲精品mv在线观看 | 欧美日韩视频在线一区 | 国产精品久久婷婷六月丁香 | 亚洲国产中文字幕在线观看 | 九九九九九精品 | 久久99免费视频 | 国产在线播放观看 | 中文字幕之中文字幕 | 国产一区二区综合 | 亚洲人在线视频 | 日韩视| 国产黄a三级三级三级三级三级 | 天天干天天操天天爱 | 久久免费中文视频 | 在线视频免费观看 | 久久在线看 | 国产亚洲精品久久久久久久久久久久 | 91试看 | 久久久免费少妇 | 91久久精品一区 | 亚洲最新合集 | 一区二区久久 | 午夜视频不卡 | 91丨九色丨国产在线 | 超碰在线亚洲 | 激情影院在线 | 日韩电影中文字幕在线 | 五月婷在线 | 99久精品 | 亚洲国产视频在线 | 一级黄色片在线观看 | 免费a级大片 | 亚洲四虎影院 | 99精品国自产在线 | 伊甸园永久入口www 99热 精品在线 | 欧美午夜理伦三级在线观看 | 日本三级久久久 | 蜜臀久久99静品久久久久久 | 免费热情视频 | 成人黄色电影免费观看 | 午夜精品在线看 | 久久人人插 | 国产只有精品 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产精品嫩草55av | 丁香视频全集免费观看 | 国产精品亚洲精品 | 国产在线一区二区三区播放 | 在线v片 | 国产91在线播放 | 久久免费黄色网址 | 999电影免费在线观看 | a√天堂资源 | 精品在线视频一区 | 精品国产综合区久久久久久 | 久久久在线视频 | 国产成人久久77777精品 | 国产一区二区精品 | 97在线看片| 亚洲精品在线资源 | 久久综合加勒比 | 91精品办公室少妇高潮对白 | 国产大陆亚洲精品国产 | 永久av免费在线观看 | 六月色婷婷 | 国产精品一区二区三区在线播放 | 国产精品视频永久免费播放 | 国产精品99久久久久久大便 | 伊人婷婷激情 | 91色网址| 激情网色 | 国产乱对白刺激视频在线观看女王 | 超碰最新网址 | 欧美伦理一区二区 | 久久亚洲精品国产亚洲老地址 | 久久草 | a√国产免费a | 国产资源 | 91精品视频播放 | 日日爱影视 | 日本电影久久 | 一区二区三区精品在线 | 成人av在线资源 | 久久国色夜色精品国产 | 亚洲精品日韩在线观看 | 播五月婷婷 | 精品一区二区av | 亚洲综合视频在线播放 | 成人黄大片视频在线观看 | 久久精彩 | 国产视频一区二区在线观看 | av在线网站免费观看 | 伊人黄| 国产在线999 | 免费日韩 | 在线看免费 | 香蕉视频啪啪 | 日韩av视屏 | 亚洲欧洲精品一区二区 | 国产精品女同一区二区三区久久夜 | 日韩av高清 | 国产高清小视频 | 亚洲免费小视频 | 亚洲精品影视在线观看 | 手机在线中文字幕 | 中文字幕在线观看2018 | 国产一二三四在线观看视频 | 最近中文字幕第一页 | 精品一区二区三区久久久 | 亚洲韩国一区二区三区 | 最新婷婷色 | 蜜臀av在线一区二区三区 | 日韩欧美在线不卡 | 国产中文自拍 | 国产一区二区在线免费视频 | 国产在线专区 | 国产一区二区三区视频在线 | 久久污视频 | 91九色视频在线观看 | 国产免费高清视频 | 一区免费视频 | 丁香婷婷久久久综合精品国产 | 日韩欧美高清一区二区 | 久草资源在线观看 | 中文视频一区二区 | 天天操天天综合网 | 亚洲成人国产精品 | 亚洲成a人片在线观看网站口工 | av 在线观看 | 日本成人免费在线观看 | 天天插综合 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日韩videos高潮hd | 成人在线播放免费观看 | 亚洲精品国偷自产在线99热 | 国产又粗又硬又长又爽的视频 | 视频精品一区二区三区 | 国产特级毛片aaaaaa高清 | 免费看一级特黄a大片 | 免费美女久久99 | 久久国产香蕉视频 | 国产精国产精品 | 国产精品国产亚洲精品看不卡 | 国内视频在线观看 | 999久久久欧美日韩黑人 | 97日日碰人人模人人澡分享吧 | 国产91九色视频 | 天天干天天干天天 | 九九av | 天堂av网址| 久久视频在线 | 日本精品免费看 | 欧美性色综合网站 | 午夜精品一区二区三区在线播放 | 欧美精品免费在线观看 | 久久久久国产一区二区三区四区 | 亚洲高清网站 | 成年人视频在线免费观看 | 欧美日韩精品网站 | 久久久亚洲网站 | 美女网站视频久久 | 久久人视频 | 亚洲精品大片www | 午夜av剧场 | 亚洲精品国产区 | 日韩在线免费播放 | 人人爽人人澡人人添人人人人 | 看av免费网站 | 韩日精品中文字幕 | 国产精品 日韩 | 日韩av网址在线 | 亚洲最大av在线播放 | 成人小视频在线 | 国内精品美女在线观看 | 欧美国产精品久久久久久免费 | 精品电影一区 | 中文字幕免费一区二区 | 97超碰免费| 午夜久久久久久久久久影院 | 欧美成年网站 | 97免费视频在线 | 黄色看片| 天天激情天天干 | 在线观看免费av网 | 四虎影视成人永久免费观看视频 | 激情偷乱人伦小说视频在线观看 | 婷婷激情综合 | 一区二区中文字幕在线播放 | 麻豆视频免费入口 | 成片免费观看视频999 | 中文字幕资源网在线观看 | 激情综合六月 | 日韩中文字幕免费视频 | 久久免费黄色大片 | 九九热国产| 91精品第一页 | 亚洲最新av在线网站 | 麻豆精品在线视频 | 在线免费观看麻豆视频 | 亚洲在线激情 | 日本系列中文字幕 | 国产精品av免费在线观看 | 最近最新最好看中文视频 | 久久久久久久久久久久亚洲 | 久草在线手机视频 | 午夜精品麻豆 | 欧美成人精品欧美一级乱黄 | 91丨九色丨91啦蝌蚪老版 | 欧美日韩视频一区二区 | 91伊人| 午夜婷婷网 | 操操综合 | 日本护士三级少妇三级999 | 欧美韩日在线 | 99 色| 国产一区 在线播放 | 国产视频不卡一区 | 婷婷丁香导航 | 久久人人爽爽人人爽人人片av | 天天操偷偷干 | 中文字幕人成人 | 97国产情侣爱久久免费观看 | 毛片网站在线观看 | 伊人视频 | 欧美日韩国产一区二区三区在线观看 | 成片视频在线观看 | 婷婷六月网 | 精品国产乱码一区二区三区在线 | 日韩色一区二区三区 | www免费 | 在线精品视频免费观看 | 99精品视频免费 | 成年人免费在线观看网站 | 99精品福利 | 天天综合网~永久入口 | 亚洲免费专区 | 国产无套精品久久久久久 | 偷拍福利视频一区二区三区 | 久久久久女教师免费一区 | 国模吧一区 | 97精品国产91久久久久久 | 日韩剧情| 精品主播网红福利资源观看 | x99av成人免费 | 精品成人久久 | 国产精品久久久久久久久久三级 | 91精品1区| 色婷婷骚婷婷 | 五月激情丁香 | 久草久热| 91亚洲网站 | 日日干干| 在线观看国产一区二区 | 99爱精品视频 | 久久久久免费视频 | 一区二区三区四区不卡 | 开心色插 | 人人爽人人干 | 日日爽 | 9999在线观看 | 久久久国产精品久久久 | 国产精品久久伊人 | 中文字幕在线观看不卡 | 91免费国产在线观看 | 国产精品免费一区二区 | 久久国产精品一国产精品 | 亚洲精品国产成人 | 808电影免费观看三年 | 丁香电影小说免费视频观看 | 国产a级免费 | 日韩a欧美 | 午夜久久网 | 久久免费99精品久久久久久 | 国产精品久久久久久久久久久久午夜 | 久草视频在线免费 | 欧美日韩一区二区在线 | 最近中文字幕在线播放 | 四虎www| 国产一区在线免费 | 综合色在线观看 | 精品国产亚洲一区二区麻豆 | 精品免费观看视频 | 在线观看国产日韩欧美 | 欧美韩日在线 | 一本一本久久a久久精品综合 | 91人人澡人人爽人人精品 | 色噜噜狠狠狠狠色综合 | 日韩系列 | 成人午夜精品福利免费 | 日韩专区在线观看 | 日韩一级电影在线 | 成人免费视频视频在线观看 免费 | 日本黄色免费播放 | 国产91亚洲 | 91日韩在线专区 | 欧美精品九九99久久 | 久久久精品午夜 | www.玖玖玖| 国产精品乱码久久久久 | 国产伦理一区二区 | 黄色免费av| 在线观看视频免费大全 | 黄色的网站免费看 | 免费激情网 | 午夜精品视频免费在线观看 | 超碰97av在线| 欧美日韩aa | 久久免费公开视频 | 中文字幕免费在线 | 国产精品一区二区免费 | 激情文学综合丁香 | 丁五月婷婷 | 久久一级电影 | 日韩a级黄色 | 亚洲国产中文在线观看 | 99精彩视频在线观看免费 | 97精品一区 | 亚洲国产午夜精品 | 人人狠 | 在线电影播放 | 青草视频在线免费 | 欧美日韩国产一二 | 日韩一级成人av | 天天做日日做天天爽视频免费 | 国产黄色精品网站 | 国产一线二线三线性视频 | 久久草草热国产精品直播 | 国产美女免费看 | 天天操天天射天天添 | 超碰夜夜 | 激情网站免费观看 | 日本黄色免费大片 | 中文理论片 | 综合久久久久 | 国产999精品久久久久久绿帽 | 欧美激情视频一区二区三区免费 | 色www精品视频在线观看 | 国产群p | 国产精品美女久久久久久2018 | 操操操综合 | 亚洲va韩国va欧美va精四季 | 成年人网站免费在线观看 | 贫乳av女优大全 | 亚洲欧美日韩国产一区二区 | 国产黄色在线观看 | 精品影院一区二区久久久 | 中日韩欧美精彩视频 | 色偷偷888欧美精品久久久 | 天天操天天综合网 | 久久国产亚洲视频 | 亚洲欧美在线综合 | 久久久久久久久久免费视频 | 日b黄色片 | 99久久婷婷国产综合精品 | 国产1级毛片 | 亚洲精品tv| 成人av在线播放网站 | 久久久www成人免费毛片 | 福利一区在线视频 | 国产欧美精品一区二区三区 | 国产黄网在线 | 夜夜躁狠狠躁日日躁视频黑人 | 久视频在线播放 | 99久久久国产精品免费观看 | 天天激情天天干 | 色噜噜在线观看 | 激情 婷婷 | 国产精品9999久久久久仙踪林 | 日韩精品免费专区 | 久久综合影视 | 色婷婷综合久久久久中文字幕1 | 国产91成人在在线播放 | 日韩高清精品一区二区 | 成年人在线播放视频 | 久福利| av免费看电影 | 亚洲日本三级 | 91一区二区在线 | 黄色免费视频在线观看 | 99riav1国产精品视频 | 超碰国产在线播放 | 在线免费黄色片 | 日韩欧美在线一区二区 | 狠狠色丁香婷婷综合 | 日本精品久久久久 | 在线免费观看av网站 | 久久久久国产一区二区三区四区 | 色偷偷中文字幕 | 伊人婷婷久久 | 亚洲黑丝少妇 | 国产精品久久久久久久久久久久午夜片 | 国产一区成人 | 欧美激情综合五月色丁香小说 | 日韩成人看片 | 500部大龄熟乱视频使用方法 | 亚洲激精日韩激精欧美精品 | 91久久精品一区二区二区 | 天天干一干 | 欧美视频在线观看免费网址 | 国产一二区免费视频 | 波多野结衣视频一区 | 日韩欧美精品免费 | 欧美在线视频a | 亚洲电影一区二区 | 午夜精品一区二区三区可下载 | 免费观看视频黄 | 人人干97 | 伊人射 | 一区二区三区在线观看免费视频 | 在线观看91视频 | 免费的国产精品 | 成人黄色在线电影 | 久久天堂影院 | 又黄又刺激的网站 | 国产少妇在线观看 | 天天撸夜夜操 | 日本系列中文字幕 | 国产69精品久久久久99 | 三级在线视频观看 | 1024手机看片国产 | 日韩一区二区三区免费电影 | 99精品视频在线观看免费 | 麻豆影视在线免费观看 | 又爽又黄又刺激的视频 | 国产亚洲精品久久网站 | 成人91视频| 国产在线精品国自产拍影院 | 99国产在线观看 | 五月婷婷丁香网 | 天天射,天天干 | 精品久久久久久久久久 | 国产精品视频地址 | av官网 | 一区二区精品视频 | 欧美久久久久久久久久久 | av一本久道久久波多野结衣 | av一级免费 | 国产91勾搭技师精品 | 在线免费性生活片 | 日韩在线高清视频 | 国产精品区二区三区日本 | 人人草人| 久久亚洲福利视频 | 欧美精品一区二区在线播放 | 免费人成网 | 亚洲理论电影网 | 亚州精品视频 | 色噜噜在线观看视频 | 久久久久久国产一区二区三区 | 日本中文字幕系列 | 亚洲成av人片一区二区梦乃 | 黄色在线观看网站 | 黄色一级性片 | 国产裸体bbb视频 | 久久国产美女 | 欧美日韩综合在线 | 久草在线高清 | 国产精品a成v人在线播放 | 亚洲精品国产自产拍在线观看 | 97精品久久人人爽人人爽 | 国产精品久久久久一区二区三区 | 亚洲另类在线视频 | 日韩一二三| 欧美男女爱爱视频 | 久久96国产精品久久99漫画 | 免费在线观看一区 | 日韩欧美国产成人 | 亚洲每日更新 | 男女全黄一级一级高潮免费看 | 日韩精品久久久免费观看夜色 | ww视频在线观看 | 韩国精品一区二区三区六区色诱 | 波多野结衣电影一区二区 | 午夜精品三区 | 国产亚洲精品久久久久久移动网络 | 久久av免费观看 | 国产高清视频免费最新在线 | 日日操操 | 国产精品欧美久久久久天天影视 | 国产亚洲无 | 成人v| 国产91av视频在线观看 | 日本爽妇网 | 丁香婷婷激情 | 久久久久免费精品国产 | 天天干天天想 | 色香蕉视频 | 人人涩 | 日韩网站免费观看 | 欧美日韩xxx | 久久久久久高潮国产精品视 | 精品999在线 | 国产视频1 | 水蜜桃亚洲一二三四在线 | 一区二区三区在线看 | 亚洲 欧美 综合 在线 精品 | 久久中文字幕在线视频 | 99视频播放| 国产成人精品电影久久久 | 日韩免费一区 | 综合伊人久久 | 精品国产一区二区三区在线 | 日韩视频二区 | 99视频在线免费播放 | 免费国产一区二区 | 精品在线观看一区二区三区 | 在线亚洲日本 | 91午夜精品 | 性色av免费看 | 精品一二三区视频 | av在线不卡观看 | 在线观看黄网站 | 久久久久久综合网天天 | 激情 一区二区 | 日本公妇在线观看高清 | 色国产精品| 日韩欧美大片免费观看 | 激情动态 | 免费在线观看av | 久久久成人精品 | 男女精品久久 | 久久成人18免费网站 | 成人av资源在线 | 亚洲精品视频一二三 | 日韩欧美在线观看一区二区三区 | 久久久久国产精品厨房 | 99精品欧美一区二区三区 | 成人av免费 | 在线观看激情av | 久草在线视频精品 | 91视频国产高清 | 精品一二三区 | 国产亚洲精品成人av久久影院 | 欧美一级小视频 | 中文字幕在线观看2018 | 综合影视| 成人精品一区二区三区电影免费 | 在线观看免费福利 | 97在线播放视频 | 天天天色综合 | 99视频免费在线观看 | 色婷婷综合五月 | 91精品推荐 | 国产日产亚洲精华av | 色婷婷88av视频一二三区 | 日韩电影在线观看中文字幕 | 国产男女免费完整视频 | 久久国产精品免费观看 | 美女网站视频久久 | 欧美美女激情18p | 一区二区久久 | 国产高清在线精品 | 九九久久在线看 | 天天色天天操综合网 | 2021久久| 欧美一区二区三区在线 | 久久久久久亚洲精品 | 久草在线综合 | 久久久91精品国产一区二区精品 | 国产夫妻av在线 | 97在线免费视频观看 | 国产成人精品一二三区 | 涩涩网站在线 | a午夜在线 | 久久久久免费看 | 国产69精品久久久久久 | 日日操日日干 | 久久另类小说 | 一区二区精品在线观看 | 亚洲精品视频偷拍 | 欧美午夜久久久 | 精品99免费视频 | 黄色网www| 人人爽人人干 | 91精品久久久久久综合五月天 | 国产91免费观看 | 永久免费毛片 | 尤物一区二区三区 | 久青草国产在线 | 欧洲激情在线 | 99久免费精品视频在线观看 | 久久久久久高潮国产精品视 | 99久久超碰中文字幕伊人 | 在线观看中文字幕第一页 | 丁香六月婷婷激情 | 91麻豆精品国产自产 | 日韩精品一区二区久久 | 欧美日本不卡视频 | 国产精品99精品久久免费 | 久久久久国产成人精品亚洲午夜 | 91亚洲夫妻 | 91亚色免费视频 | 热久久免费国产视频 | 制服丝袜欧美 | 精品国产乱码久久久久久浪潮 | 欧美一区免费观看 | 深夜男人影院 | 欧美一级高清片 | 国产精品一区二区三区99 | 免费午夜在线视频 | 中文字幕 国产 一区 | 香蕉视频在线网站 | 国内视频在线 | 在线观看一 | 久久久国产精品亚洲一区 | 国内外成人在线 | 日批网站免费观看 | 美女在线国产 | 操操操天天操 | 久久久亚洲影院 | www日韩精品 | 天天综合91| 日韩精品资源 | 国产免费区| 欧美精品做受xxx性少妇 | 亚洲天堂网在线视频观看 | 欧美午夜精品久久久久久孕妇 | 激情影院在线 | 999精品 | 视频在线国产 | 成人午夜黄色 | 一二三精品视频 | 亚洲激情影院 | 综合激情婷婷 | 中文 一区二区 | 亚洲 欧美 成人 | 色欲综合视频天天天 | 欧美va电影 | 一级黄色免费网站 | 久久久久成人免费 | 手机在线永久免费观看av片 | 久久久久久视频 | 成人免费ⅴa | 91免费视频国产 | 91av在线免费视频 | 丁香六月中文字幕 | 欧美一二三区在线播放 | 国产免费久久av | 国产精品一区二区三区四区在线观看 | 国产在线观看午夜 | 日韩av影片在线观看 | 成人作爱视频 | 久久久国产毛片 | 午夜国产一区二区三区四区 | 欧美精品久久久久久久久久白贞 | 日韩精品久久久久久 | 一区二区三区av在线 | 日韩精品久久一区二区三区 | 三级黄色片在线观看 | 97在线观看视频国产 | 亚洲精品理论 | 国产一区播放 | 日韩| a久久久久| av解说在线观看 | 久久免费视频网站 | 91视频久久久久久 | 久热这里有精品 | 久久久久久久久久久综合 | 日一日操一操 | 国产成人精品一区二区在线观看 | 国产精品无av码在线观看 | 国内外成人在线 | 国产在线观看黄 | 一区二区三区福利 | 丁香久久综合 | 国产精品中文字幕在线 | 狠狠色综合网站久久久久久久 | 国产精品美女久久久久久 | 337p日本欧洲亚洲大胆裸体艺术 | 久久视频这里有精品 | 日日爽天天操 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 亚洲在线不卡 | 国产精品国产三级在线专区 | 九九色视频 | 日韩高清免费电影 | 久久久久久免费毛片精品 | 国产一区二三区好的 | 久久精品91视频 | 国产一区二区精品在线 | 久久精品国产免费 | 欧美性色综合网 | 九九99| 日韩欧美精品免费 | 国产在线a免费观看 | 久久伊人八月婷婷综合激情 | 黄色在线观看免费 |