中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java面向對象編程的方法是什么

發布時間:2021-11-02 13:40:54 來源:億速云 閱讀:123 作者:iii 欄目:編程語言

這篇文章主要講解了“java面向對象編程的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java面向對象編程的方法是什么”吧!

案例《寵物商店》

    1.介紹

        功能:

            a.寵物商店可以進購寵物,出售寵物;

            b.寵物具備吃東西的能力;

            c.寵物主人可以在寵物商店購買寵物,可以給寵物起名字,喂養寵物;

    2. 分析:

            通過以上功能介紹和面向對象編程的思想,可以分析得出如下結果:

            a. 寵物商店具備進購和出售寵物的功能(即:寵物商店類,命名為 PetShop),同時商店的寵物需要有一個HashMap集合,名為pets,類似于寵物店中的籠子,存放著各種寵物供顧客購買;

            b. 寵物基本各自特有屬性,比如說:名字 ,品種等屬性(即:寵物類,命名為pet);

            c. 寵物店售賣寵物,那就有各種各樣的寵物,比如說:寵物狗,寵物貓(即:寵物狗類,命名為Dog;寵物貓類,命名為Cat);

            d. 寵物主人擁有購買寵物和喂養寵物的功能(即:寵物主人類,命名為:Master);

    3. 編碼

    通過分析,我們大致了解了我們具體要如何編碼,下面就通過編碼的形式運用它的四大特性;

    a. 封裝特性

            封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法;

封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。

    了解了封裝的概念,我們大致就知道了寵物的特有屬性是不可隨意改變的,那我們是不是可以把它封裝起來,代碼如下:

import java.util.ArrayList;
import java.util.List;
/**
* 封裝特性

*1.通過private修飾符修飾,使外部不可直接訪問 *2.通過get,set方法向外提供間接的訪問
**/

public class Pet {
private String id;
private String strain;
private int loveNum;
private int num;
private String name;
public static List<Pet> petSpecies;
       static {   //靜態代碼塊,只會在第一次執行構造方法的時候執行,初始化petSpecies集合

petSpecies = new ArrayList<Pet>();
petSpecies.add(new Pet("001","波斯貓",0,9999));
petSpecies.add(new Pet("002","加菲貓",0,9999));
petSpecies.add(new Pet("003","哈士奇",0,9999));
petSpecies.add(new Pet("004","中華田園犬",0,9999));
petSpecies.add(new Pet("005","中華田園貓",0,9999));
petSpecies.add(new Pet("006","牧羊犬",0,9999));
System.out.println("id\t品種");
for(Pet pet:petSpecies) {
System.out.println(pet);
}
}

public Pet(String id,String strain, int loveNum,int num) {
this.strain = strain;
this.id = id;
this.loveNum = loveNum;
this.num = num;
}

public Pet(){

}

//商店進購寵時,根據商家所選的id和數量給商家返回寵物
public static Pet givePetToShop(String petId,int petNum) {
Pet pet = null;
for(Pet p:petSpecies) {
if(p.getId().equals(petId)) {
pet = p;
pet.setNum(petNum);
return pet;
}
}
return pet;
}

public void eat() {
System.out.println(strain+"正在開心的吃東西");
}

@Override//重寫toString方法
public String toString() {
return this.id+"\t" + this.strain +"\t";
}

@Override//重寫hashCode方法
public int hashCode() {
return this.getId().hashCode();
}

@Override//重寫equals方法
public boolean equals(Object obj) {
if(obj instanceof Pet) {//判斷obj類是否為Pet類或Pet的子類
Pet other  = (Pet)obj;
if(this.getId().equals(other.getId())) {
if(this.getStrain().equals(other.getStrain())) {
return true;
}
}
}
return false;
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}

public String getName() {
return name;
}

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

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getStrain() {
return strain;
}

public void setStrain(String strain) {
this.strain = strain;
}

public int getLoveNum() {
return loveNum;
}

public void setLoveNum(int loveNum) {
this.loveNum = loveNum;
}
}

b. 繼承特性

    繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為 。

c.  多態性

    多態是同一個行為具有多個不同表現形式或形態的能力。  

    了解了繼承和多態的概念,我們大致知道了貓和狗都屬于寵物,則貓和狗可以繼承寵物的特征和行為,同時每個寵物的行為有不同表現形式,如下代碼所示:

/*** 繼承特性*1.狗繼承了寵物的特性*多態性*2.狗重寫了吃的行為,即狗吃的行為是寵物吃的一種表現形式**/public class Dog extends Pet {private String name;
public Dog() {

}

public Dog(String id,String strain,int loveNum,int num,String name) {
super(id,strain,loveNum,num);//調用父類的有參數的構造方法
this.name = name;
}

@Override//重寫繼承Pet類中的eat()方法
public void eat() {
System.out.println("寵物狗"+name + ":吃的好飽,親密值加5哦!");
this.setLoveNum(this.getLoveNum()+5);//親密值加5
}
public String getName() {
return name;
}

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


/*** 繼承特性*1.貓繼承了寵物的特性*多態性*2.貓也重寫了吃的行為,即貓吃的行為是寵物吃的一種表現形式**/
public class Cat extends Pet {
private String name;
public Cat() {
}

public Cat(String id,String strain,int loveNum,int num,String name) {
super(id,strain,loveNum,num);
this.name = name;
}

@Override//重寫eat()方法
public void eat() {
System.out.println("寵物貓"+name + ":吃的好飽,親密值加3哦!");
this.setLoveNum(this.getLoveNum()+3);
}

public String getName() {
return name;
}

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

}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
*
* @ClassName: PetShop  
* @Description: 寵物商店,具有進購寵物、售賣寵物等功能(方法)
*/
public class PetShop {
private static String name;//店鋪名稱
private static String address;//店鋪地址
private boolean isHasCustom;//判斷是否有顧客前來
private static HashMap<Pet,Integer> pets;//存放寵物的集合,鍵是Pet類,值是寵物的數量
static{//靜態代碼塊,初始化商店里的寵物,只會在第一次執行構造方法 的時候執行

name = "好再來";
address = "二七區海為科技園";
System.out.println("---------"+name+"寵物店——"+address+"分店-------------");
Cat boSiCat = new Cat("001","波斯貓",0,3,"");
Cat coffeCat = new Cat("002","加菲貓",0,2,"");
Dog haShiqi =  new Dog("003","哈士奇",0,2,"");
Dog tianYuanQuan =  new Dog("004","中華田園犬",0,4,"");
pets = new HashMap<Pet,Integer>();
pets.put(boSiCat, boSiCat.getNum());
pets.put(coffeCat,coffeCat.getNum());
pets.put(haShiqi, haShiqi.getNum());
pets.put(tianYuanQuan,tianYuanQuan.getNum());

    }

public PetShop(String name, String address) {
super();
this.isHasCustom = false;
}
public PetShop() {
this.isHasCustom = false;
}
/**
* 展示寵物
*/
public void showAllPet() {
System.out.println("編號\t品種\t數量");
Set<Map.Entry<Pet,Integer>> entry = pets.entrySet();
Iterator it = entry.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
//依據id返回寵物
public Pet getPetById(String id) {
if(id != null) {
for(Pet p:pets.keySet()) {
if(p.getId().equals(id)) {
return p;
}
}
}
return null;
}

/**
* 進購寵物,這里就用到了重寫的equals方法和hashCode方法
*/
public boolean purchasePets(Pet pet) {
Set<Map.Entry<Pet, Integer>> entry = pets.entrySet();
Iterator it = entry.iterator();
while(it.hasNext()) {
if(it.next().equals(pet)) {//如果商店已經包含此寵物,只需更新此寵物的數量
pets.put(pet, pets.get(pet)+pet.getNum());
return true;
}
}
pets.put(pet, pet.getNum());
return true;
}
/**
* 添加寵物,如果已經包含該寵物,則只更改寵物的數量
此功能需要先重寫hashCode()和equals()方法
*/
public boolean addPetToShop(Pet pet) {
if(pet == null)
return false;
if(pets.containsKey(pet)) {
pets.put(pet, pets.get(pet)+pet.getNum());
return true;
}else {
pets.put(pet, pet.getNum());
return true;
}
}

/**
* 從商店出售寵物
*/
public boolean removePetFromShop(Pet pet) {
if(pet == null)
return false;
for(Pet p:pets.keySet()) {
if(p.equals(pet) && pets.get(p) == pet.getNum()) {
pets.remove(p);
return true;
}
if(p.equals(pet) && pets.get(p) > pet.getNum()) {
pets.put(pet, pets.get(p) - pet.getNum());
return true;
}
if(p.equals(pet) && pets.get(p) < pet.getNum()) {
return false;
}
}
return false;
}

/**
* 判斷是否有顧客前來
* @return
*/
public boolean isHasCustom() {
return isHasCustom;
}

public void setHasCustom(boolean isHasCustom) {
this.isHasCustom = isHasCustom;
}
public String getName() {
return name;
}

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

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public HashMap<Pet,Integer> getPets() {
return pets;
}

}
import java.util.ArrayList;
import java.util.List;
/**
*
* @ClassName: Master  
* @Description:主人類,有購買寵物等行為(也就是方法)
*/
public class Master {
private String name;
List<Pet> myPets;

public Master() {
myPets = new ArrayList<Pet>();
}

public Master(String name) {
myPets = new ArrayList<Pet>();
this.name = name;
}

//去寵物店的行為
public boolean goPetShop(PetShop shop) {
shop.setHasCustom(true);
return true;
}

//瀏覽寵物行為
public void scanPet(PetShop shop) {
if(goPetShop(shop)) {
shop.showAllPet();
}else {
System.out.println("暫時無法瀏覽寵物!");
}
}
//離開商店的行為
public void outShop(PetShop shop) {
shop.setHasCustom(false);
}

//更新myPets中的寵物的信息
public  boolean updateMyPets(Pet pet) {
for(int i = 0;i < myPets.size();i++) {
if(myPets.get(i).equals(pet)) {
myPets.get(i).setName(pet.getName());
myPets.get(i).setNum(pet.getNum());
myPets.get(i).setLoveNum(pet.getLoveNum());
return true;
}
}
return false;
}
//給寵物命名并更新寵物
public boolean setNameToPet(Pet pet,String name) {
if(pet != null && name != null) {
pet = getPetStrain(pet);//獲取寵物的種類
pet.setName(name);//如果是Dog類,就執行Dog類的方法
pet.setLoveNum(50);
updateMyPets(pet);
return true;
}
return false;
}
//購買寵物
public boolean buyPet(Pet pet,PetShop shop) {
if(pet != null) {
pet.setNum(1);
myPets.add(pet);
shop.removePetFromShop(pet);//這里寵物商店里的寵物要減少一只
return true;
}
else
return false;
}

/**
* 給寵物喂食
*/
public boolean feedPet(Pet pet) {
if(pet!= null) {
getPetStrain(pet).eat();
return true;
}
return false;
}
//查看所擁有的寵物信息
public boolean scanMyPets() {
if(myPets.size()==0) {
return false;
}
System.out.println("id\t品種\t名字\t親密值");
for(Pet p:myPets) {
System.out.print(p.getId()+"\t"+p.getStrain()+"\t"+p.getName()                                        +"\t"+p.getLoveNum()+"\n");
}
return true;
}

//查看某個寵物的親密值
public void loveNumWithPet(String name) {
Pet pet = getMyPetByName(name);
System.out.println(pet.getName() + ":我們的親密值為"+pet.getLoveNum());
}

//通過名字查找寵物
public Pet getMyPetByName(String petName) {
for(Pet pet:myPets) {
if(pet.getName().equals(petName)) {
return pet;
}
}
return null;
}

//獲取寵物的品種
public Pet getPetStrain(Pet pet) {
if(pet.getStrain().equals("波斯貓")||pet.getStrain().equals("加菲貓")) {
return((Cat)(pet));
}
if(pet.getStrain().equals("哈士奇")||pet.getStrain().equals("中華田園犬")) {
return((Dog)(pet));
}
return  null;
}
public String getName() {
return name;
}

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

public List<Pet> getMyPets() {
return myPets;
}

public void setMyPets(List<Pet> myPets) {
this.myPets = myPets;
}

}
import java.util.ArrayList;
import java.util.List;
/**
*
* @ClassName: Master  
* @Description:主人類,有購買寵物等行為(也就是方法)
* @author yemao  
* @date 2019年3月21日  
*/
public class Master {
private String name;
List<Pet> myPets;

public Master() {
myPets = new ArrayList<Pet>();
}

public Master(String name) {
myPets = new ArrayList<Pet>();
this.name = name;
}

//去寵物店的行為
public boolean goPetShop(PetShop shop) {
shop.setHasCustom(true);
return true;
}

//瀏覽寵物行為
public void scanPet(PetShop shop) {
if(goPetShop(shop)) {
shop.showAllPet();
}else {
System.out.println("暫時無法瀏覽寵物!");
}
}
//離開商店的行為
public void outShop(PetShop shop) {
shop.setHasCustom(false);
}

//更新myPets中的寵物的信息
public  boolean updateMyPets(Pet pet) {
for(int i = 0;i < myPets.size();i++) {
if(myPets.get(i).equals(pet)) {
myPets.get(i).setName(pet.getName());
myPets.get(i).setNum(pet.getNum());
myPets.get(i).setLoveNum(pet.getLoveNum());
return true;
}
}
return false;
}
//給寵物命名并更新寵物
public boolean setNameToPet(Pet pet,String name) {
if(pet != null && name != null) {
pet = getPetStrain(pet);//獲取寵物的種類
pet.setName(name);//如果是Dog類,就執行Dog類的方法
pet.setLoveNum(50);
updateMyPets(pet);
return true;
}
return false;
}
//購買寵物
public boolean buyPet(Pet pet,PetShop shop) {
if(pet != null) {
pet.setNum(1);
myPets.add(pet);
shop.removePetFromShop(pet);//這里寵物商店里的寵物要減少一只
return true;
}
else
return false;
}

/**
* 給寵物喂食
*/
public boolean feedPet(Pet pet) {
if(pet!= null) {
getPetStrain(pet).eat();
return true;
}
return false;
}

//陪寵物玩耍
public boolean playWithPet(Pet pet) {
if(pet!= null) {
getPetStrain(pet).play();
return true;
}
return false;
}
//查看所擁有的寵物信息
public boolean scanMyPets() {
if(myPets.size()==0) {
return false;
}
System.out.println("id\t品種\t名字\t親密值");
for(Pet p:myPets) {
System.out.print(p.getId()+"\t"+p.getStrain()+"\t"+p.getName()                                        +"\t"+p.getLoveNum()+"\n");
}
return true;
}

//查看某個寵物的親密值
public void loveNumWithPet(String name) {
Pet pet = getMyPetByName(name);
System.out.println(pet.getName() + ":我們的親密值為"+pet.getLoveNum());
}

//通過名字查找寵物
public Pet getMyPetByName(String petName) {
for(Pet pet:myPets) {
if(pet.getName().equals(petName)) {
return pet;
}
}
return null;
}

//獲取寵物的品種
public Pet getPetStrain(Pet pet) {
if(pet.getStrain().equals("波斯貓")||pet.getStrain().equals("加菲貓")) {
return((Cat)(pet));
}
if(pet.getStrain().equals("哈士奇")||pet.getStrain().equals("中華田園犬")) {
return((Dog)(pet));
}
return  null;
}
public String getName() {
return name;
}

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

public List<Pet> getMyPets() {
return myPets;
}

public void setMyPets(List<Pet> myPets) {
this.myPets = myPets;
}

}
import java.util.Scanner;

/**
* @ClassName: Test
* @Description: 測試類
* ArrayList在遍歷的時候如果同時刪除元素就會拋出java.util.ConcurrentModificationException異常
*/
public class Test {

private static Scanner sc = new Scanner(System.in);// 實例化一個輸入流對象

public static void main(String[] args) {
PetShop shop = new PetShop();
Master master = new Master("明明");//實例化一個寵物主人,明明
Pet pet = null;

int circleNum = 0;// 表示while循環的次數
int choiceNum = -1;// 操作數
String petId = "";
while(choiceNum == -1) {
circleNum++;
if(circleNum == 1) {
System.out.println("**進購寵物**");
new Pet();//初始化進購的寵物種類,為的是執行Pet.java里的靜態代碼塊
}
System.out.println("選擇操作:1、進購\t2、離開");
choiceNum  = sc.nextInt();
if(choiceNum == 1) {
System.out.println("請輸入要進購寵物的id和數量");
pet = Pet.givePetToShop(sc.next(), sc.nextInt());
if(pet != null) {
shop.addPetToShop(pet);//商家進購此寵物
System.out.println("進購成功!");
choiceNum = -1;
}else {//表示輸入的id有誤,沒有此類寵物
System.out.println("沒有此類寵物!");
choiceNum = -1;
}
}else if(choiceNum == 2) {
choiceNum = -2;
}else {
System.out.println("輸入有誤!請重新選擇!");
}
}
       circleNum = 0;
master.goPetShop(shop);// 去寵物店
while (shop.isHasCustom()) {
circleNum++;
if (circleNum == 1) {
System.out.println(shop.getName() + ":歡迎" + master.getName()                                        + "光臨本店");
} else {
System.out.println(shop.getName() + ":請選擇要進行的操作:1.瀏覽寵物\t2.離開本店");
choiceNum = sc.nextInt();// 從鍵盤控制臺接收一個整數
if (choiceNum == 1) {
master.scanPet(shop);// 明明瀏覽寵物
System.out.println(shop.getName()                                                + ":請輸入編號來選擇您想要的寵物:");
petId = sc.next();
pet = shop.getPetById(petId);// 通過id獲得寵物
if (pet == null) {
System.out.println(shop.getName()                                                            + ":請輸入正確的編號!");
} else {
System.out.println(shop.getName()                                                    + ":您選擇了" + pet                                                     + ",是否確認購買?1.確認購買\t2.在考慮一下");
choiceNum = sc.nextInt();
if (choiceNum == 1) {
master.buyPet(pet, shop);// 明明購買這個寵物
System.out.println(shop.getName()                                                                + ":恭喜您獲得新寵!");
}
}
} else if (choiceNum == 2) {
master.outShop(shop);// 離開商店
System.out.println(shop.getName()                                                    + ":客官慢走,歡贏下次光臨!");
circleNum = 0;
}
}
}
System.out.println(master.getName()+ "離開了" + shop.getName()                                   + "寵物店,正在回家的路上.......");
String petName = null;
while (true) {
circleNum++;
if (circleNum == 1) {
System.out.println(master.getName() + "回到家了");
System.out.println(master.getName() + ":給新買的寵物們起個名吧!嘻嘻!");
for (Pet p : master.getMyPets()) {
System.out.println("這只寵物是" + p.getStrain()                                                             + ",給他起個名字:");
petName = sc.next();
if (master.setNameToPet(pet, petName)) {// 給寵物起名字
System.out.println(pet.getName()                                                 + ":有了新名字很開心!親密值增加了" + pet.getLoveNum());
}
}
System.out.println(master.getName()                                    + ":所有的寵物都起好名字了,他們更喜歡我了!");
System.out.println("請選擇操作:1.給寵物喂食\t"                                                +"2.獲取所有的寵物信息\t3.退出:");
choiceNum = sc.nextInt();
}
if (choiceNum > 4 || choiceNum < 1) {
System.out.println("輸入有誤!");
} else {

while (choiceNum == 1) {
System.out.println(master.getName() + ":先喂給誰呢?隨便點名吧!");
pet = master.getMyPetByName(sc.next());
master.feedPet(pet); System.out.println("請選擇操作:1.給寵物喂食\t"                                                            +"2.獲取所有的寵物信息\t3.退出:");
choiceNum = sc.nextInt();
}
while (choiceNum == 2) {
master.scanMyPets();
System.out.println("請選擇操作:1.給寵物喂食\t"                                                            +"2.獲取所有的寵物信息\t3.退出:");
choiceNum = sc.nextInt();
}
if (choiceNum ==3)
break;
}
}
System.out.println("程序已退出!");
}
}

感謝各位的閱讀,以上就是“java面向對象編程的方法是什么”的內容了,經過本文的學習后,相信大家對java面向對象編程的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宾阳县| 荥经县| 苗栗市| 大关县| 娄底市| 荣昌县| 安化县| 邹城市| 惠来县| 高密市| 锡林郭勒盟| 汨罗市| 巢湖市| 阿荣旗| 惠东县| 肇东市| 丘北县| 泉州市| 天等县| 晋州市| 衢州市| 邵阳市| 和政县| 彰武县| 菏泽市| 卫辉市| 江川县| 张家川| 武义县| 柘城县| 竹山县| 宜章县| 辰溪县| 镇江市| 寿阳县| 肇东市| 白河县| 北碚区| 泰安市| 河曲县| 三亚市|