真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

多態(tài)的綜合練習(xí)(Java)-創(chuàng)新互聯(lián)

多態(tài)的綜合練習(xí)(Java)

成都創(chuàng)新互聯(lián)從2013年開始,公司以成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶成百上千家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。文章目錄
  • 多態(tài)的綜合練習(xí)(Java)
      • 【題目描述】
      • 【思路】
      • 【代碼實(shí)現(xiàn)】
      • 【思考】
      • 【總代嗎】

【題目描述】
  1. 定義Dog類

    ? 屬性:

    ? 年齡(age)、顏色(color)

    ? 行為:

    ? eat(String something)(something表示吃的東西)

    ? 看家lookHome方法(無參數(shù))

  2. 定義Cat類

    ? 屬性:

    ? 年齡(age)、顏色(color)

    ? 行為;

    ? eat(String something)(something代表吃的東西)

    ? 逮老鼠catchMouse方法(無參數(shù))

  3. 定義Person類

    ? 屬性:

    ? 姓名(name)、年齡(age)

? 行為:

? keepPet(Dog dog,String something)方法

? 功能:喂養(yǎng)寵物狗,something表示喂養(yǎng)的東西

? 行為:

? keepPet(Cat cat,String something)方法

? 功能:喂養(yǎng)寵物貓,something表示喂養(yǎng)的東西

? 生成空參有參構(gòu)造,set和get方法

  1. 定義測試類(完成以下打印效果)

    ? 屬性:

    ? keepPet(Dog dog,String something)方法打印內(nèi)容如下:

    ? 年齡為30歲的老王養(yǎng)了一只黑色的3歲的狗

    ? 3歲的黑色的狗兩只前腳死死地抱住骨頭猛吃

    ? keepPet(Cat cat,String something)方法打印內(nèi)容如下:

    ? 年齡為30歲的老王養(yǎng)了一只白色的2歲的貓

    ? 2歲的白色的貓瞇著眼睛側(cè)著頭吃魚

  2. 思考:

    1. Dog和Cat都是Animal的子類,以上案例中針對不同的動物,定義了不同的keepPet方法,過于繁瑣,能否簡化,并體會簡化的好處?
    2. Dog和Cat雖然都是Animal的子類,但是都有其特有方法,能否想辦法在keepPet中調(diào)用特有方法
【思路】
  • Dog類和Cat類有相同的屬性和行為,因此可以把Dog類和Cat來放到一個父類里,優(yōu)化代碼
  • Dog類和Cat類都有自己特有的行為,因此在定義類的時候要單獨(dú)編寫特有的類
  • Dog類和Cat類的eat行為雖然看起來一樣,但是在后面的輸出內(nèi)容看出來,這兩的輸出格式并不是一樣的,因此需要進(jìn)行重寫
  • Person類因?yàn)闆]有和Dog類以及Cat類相同的屬性和行為,所以不能和Dog類和Cat類一樣放到同一個父類下
【代碼實(shí)現(xiàn)】

表情包

第一步,根據(jù)Dog類和Cat類的相同的屬性和行為創(chuàng)建他們的父類Animal類,Animal類里應(yīng)該要寫好共有的屬性并且要進(jìn)行封裝,接著還要寫好eat行為。寫好父類后要寫Dog類和Cat類。這兩個類在繼承Animal類的時候要注意加關(guān)鍵字extends。并且還要對eat行為進(jìn)行重寫,此時eat行為的重寫要注意輸出時候的格式類型

//父類
public class Animal {private int age;
    private String color;

    public Animal() {}

    public Animal(int age, String color) {this.age = age;
        this.color = color;
    }

    public int getAge() {return age;}

    public void setAge(int age) {this.age = age;
    }

    public String getColor() {return color;
    }

    public void setColor(String color) {this.color = color;
    }

    public void eat(String something) {System.out.println("動物在吃" + something);
    }
}
//Dog類
public class Dog extends Animal {public Dog() {}

    public Dog(int age, String color) {super(age, color);
    }

    @Override
    public void eat(String something) {System.out.println(getAge() + "歲的" + getColor() + "色的狗兩只前腳死死地抱住" + something + "猛吃");
    }

    public void lookhome() {System.out.println("狗在看家");
    }
}
//Cat類
public class Cat extends Animal {public Cat() {}

    public Cat(int age, String color) {super(age, color);
    }

    @Override
    public void eat(String something) {System.out.println(getAge() + "歲的" + getColor() + "色的貓瞇著眼睛側(cè)著頭吃著" + something);
    }

    public void catchMouse() {System.out.println("貓抓老鼠");
    }
}

注意Dog類和Cat類主要的成員變量已經(jīng)在父類中定義過了,可以直接調(diào)用,但是要注意有superl來說明來自父類

第二步,根絕要求創(chuàng)建Person類。Person類的屬性就是name、age,行為就keepPet。但是keepPet主要是針對兩個類的,所以要進(jìn)行重載。

//Person類
public class Person {private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {this.name = name;
        this.age = age;
    }

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }

    public void keepPet(Dog dog, String something) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + dog.getColor() + "的" + dog.getAge() + "歲的狗");
        dog.eat(something);
    }

    public void keepPet(Cat cat, String something) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + cat.getColor() + "的" + cat.getAge() + "歲的貓");
        cat.eat(something);
    }
}

第三步,在主函數(shù)中創(chuàng)建初始化Dog、Cat、Person,最后直接調(diào)用Person下的方法,進(jìn)行輸出

public class Main {public static void main(String[] args) {Person p = new Person("老王", 20);
        Dog dog = new Dog(1, "黑");
        Cat cat = new Cat(2, "白");
        p.keepPet(dog, "骨頭");
        p.keepPet(cat, "魚");
    }
}

在這里插入圖片描述

【思考】

Dog和Cat都是Animal的子類,以上案例中針對不同的動物,定義了不同的keepPet方法,過于繁瑣,能否簡化,并體會簡化的好處?

Dog和Cat雖然都是Animal的子類,但是都有其特有方法,能否想辦法在keepPet中調(diào)用特有方法

  1. 當(dāng)子類過多的時候,我們一個一個的定義胡話會過于麻煩,不僅如此,還要寫很多行代碼。為了處理這種情況,我們可以進(jìn)行一些轉(zhuǎn)化。

    當(dāng)子類過多的時候,我們可以直接用他們的父類作為形參對keepPet進(jìn)行進(jìn)行一些修改。

public class Person {private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {this.name = name;
        this.age = age;
    }

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }

    public void keepPet(Animal a,String something){System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + a.getColor() + "的" + a.getAge() + "歲的動物");
        a.eat(something);
    }
}

注意此時的代碼有幾個弊端:1. 輸出的時候沒法說明在這里進(jìn)行說明是什么動物,只能用“動物”來代替父類中的所有子類;2. 不能調(diào)用各個子類的特有的方法,只能調(diào)用在父類中已經(jīng)寫好的方法;

面對上述問題可以進(jìn)行強(qiáng)轉(zhuǎn),將進(jìn)入的類型強(qiáng)轉(zhuǎn)成需要的類型,這里主要是用到了intanceof

public class Person {private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {this.name = name;
        this.age = age;
    }

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }

    public void keepPet(Animal a, String something) {if (a instanceof Dog d) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + a.getColor() + "的" + a.getAge() + "歲的狗");
            d.eat(something);
        } else if (a instanceof Cat c) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + c.getColor() + "的" + c.getAge() + "歲的貓");
            c.eat(something);
        }else{System.out.println("沒有這種動物");
        }
    }
}

注意利用intanceof將父類轉(zhuǎn)化成子類之前,要確定這倆確定是繼承關(guān)系

【總代嗎】
//父類
public class Animal {private int age;
    private String color;

    public Animal() {}

    public Animal(int age, String color) {this.age = age;
        this.color = color;
    }

    public int getAge() {return age;}

    public void setAge(int age) {this.age = age;
    }

    public String getColor() {return color;
    }

    public void setColor(String color) {this.color = color;
    }

    public void eat(String something) {System.out.println("動物在吃" + something);
    }
}
//Dog類
public class Dog extends Animal {public Dog() {}

    public Dog(int age, String color) {super(age, color);
    }

    @Override
    public void eat(String something) {System.out.println(getAge() + "歲的" + getColor() + "色的狗兩只前腳死死地抱住" + something + "猛吃");
    }

    public void lookhome() {System.out.println("狗在看家");
    }
}
//Cat類
public class Cat extends Animal {public Cat() {}

    public Cat(int age, String color) {super(age, color);
    }

    @Override
    public void eat(String something) {System.out.println(getAge() + "歲的" + getColor() + "色的貓瞇著眼睛側(cè)著頭吃著" + something);
    }

    public void catchMouse() {System.out.println("貓抓老鼠");
    }
}
//Person類
public class Person {private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {this.name = name;
        this.age = age;
    }

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }

    public void keepPet(Animal a, String something) {if (a instanceof Dog d) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + a.getColor() + "的" + a.getAge() + "歲的狗");
            d.eat(something);
        } else if (a instanceof Cat c) {System.out.println("年齡為" + getAge() + "歲的" + getName() + "養(yǎng)了一只" + c.getColor() + "的" + c.getAge() + "歲的貓");
            c.eat(something);
        }else{System.out.println("沒有這種動物");
        }
    }
}
//測試類
public class Main {public static void main(String[] args) {Person p = new Person("老王", 20);
        Dog dog = new Dog(1, "黑");
        Cat cat = new Cat(2, "白");
        p.keepPet(dog, "骨頭");
        p.keepPet(cat, "魚");
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站欄目:多態(tài)的綜合練習(xí)(Java)-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/gcpee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部