Day12_12

一.面向對象的四大支柱:

  • 1.抽象:定義一個類的過程就是抽象的過程(數據抽象、行為抽象),
  •  通過抽象我們可以將數據和操作數據的方法以“對象”的概念綁定在一起;
    
  •  抽象的過程是一個仁者見仁智者見智的過程,對同一個對象進行抽象可能會有不同的結果;
    
  • 2.封裝:隱藏一切可以隱藏的實現細節,只向外界提供最簡單的編程接口;
  • 3.繼承:從一個已有的類創建一個新類的過程,提供繼承信息的叫父類(超類、基類),
  •  得到繼承信息的叫子類(派生類、衍生類),繼承是是現代碼復用的一種手段
    
  • 4.多態: 同樣的引用類型調用了相同的方法做了不同的事情
  •      -實現多態的兩個關鍵步驟:1方法重寫(注意與方法重載的區別),2對象造型
    

二.通常程序員能在內存里操控的三塊區域

  • 棧---快、小-臨時變量/局部變量(方法里面的變量)
  • 堆---稍慢、特別大(可調整,理論上可以調到物理內存的大小)-對象
  • 方法區---代碼,常量

三.繼承-extends

1.多態的使用

  • 同樣的類型調用相同的方法(發出同樣的消息)但是做了不一樣的事情-這就是多態(polymorphism)
  • 如何實現多態:
    1.方法重寫-子類在繼承父類得過程中對父類的方法給出自己的實現版本
    2.對象造型-用父類型的變量保存子類的對象

2.枚舉的定義

  • enum

3.instaanceof運算符

  • instanceof是一種運算符,可以判斷對象是不是某種類型,結果產生的是布爾值
  • 該運算符是在程序運行時判斷對象的類型-RTTI

4.抽象類和抽象方法-abstract

  • 抽象方法:
    1.一個方法暫時無法給出實現,那么可將其聲明為抽象方法;用abstract關鍵字修飾,且沒有方法體
    2.一個類如果包含抽象方法(說明該類不完整),那么該類也必須要聲明為抽象類
    3.抽象類不能實例化(不能創造抽象類的對象)
    4.抽象類是專門留給其他類去繼承的類

5.方法重寫(注意與方法重載的區別)

@Override
方法重寫(置換,覆蓋,覆寫),父類有這個方法可能實現了,可能沒實現
子類把父類的這個方法重新實現一次(給出自己的版本)

  • 重載:同一個類中有同名的方法,只要參數列表不相同就可以共存-overload
  • 重寫:子類在繼承父類當中對父類已有的方法給出新的實現版本-override

6.四種訪問修飾符

java四種訪問修飾符:private<default<protectd<public

  • 1.private:同類
  • 2.default:同類,同包
  • 3.protected:同類,同包,子類
  • 4.public:同類,同包,子類,不同包
package Day12_12_01;
public class PetTest
{
        public static void main(String[] args)
    {
        //temp在棧上,它保存了堆上的Cat對象的地址
        //通過temp就可以找到堆上的對應的Cat對象并給對象發消息
        //所以我們通常把對象類型的變量稱為對象的引用
        //java中的類型分為兩大類:
        //  1.基本數據類型(8種)和枚舉類型
        //  2.引用類型
        Pet temp=new Cat("花花", Sex.FEMLE, "藍色");
        
        Pet[] petsArray=
            {
                    new Dog("旺財", Sex.MALE, true),
                    new Cat("咪咪", Sex.FEMLE, "黃色"),
                    new Dog("歡歡", Sex.FEMLE, false),
                    new Pig("發財", Sex.FEMLE,100)
            };
        
        
        for(Pet pet:petsArray)
        {
            pet.eat();
            pet.play("球球");
            
            
            pet.makeVoice();
            
            
            if(pet instanceof Dog)
            {
                ((Dog) pet).keepTheDoor();
            }else if(pet instanceof Cat){
                ((Cat) pet).climbUpTheTree();
            }else if(pet instanceof Pig){
                System.out.println(pet.getNickname()+"重"+((Pig) pet).showWeight()+"公斤");
            }           
        }
    }
}
  • 父類
package Day12_12_01;
/**
 * 寵物
 * @author YY
 *
 */
public abstract class Pet
{
    private String nickname;
    private Sex sex;
/**
 *構造器
 * @param nickname
 * @param sex
 */
    public Pet(String nickname, Sex sex)
    {
        this.nickname = nickname;
        this.sex = sex;
    }
/**
 *得到名字
 * @return
 */
    public String getNickname()
    {
        return nickname;
    }
/**
 * 得到性別
 * @return
 */
    public String  getSex()
    {
        return sex==Sex.MALE?"公":"母";
    }
/**
 * 吃東西
 */
    public void eat()
    {
        System.out.println(nickname + "正在吃東西");
    }
/**
 * 玩耍
 * @param thing 玩的東西
 */
    public void play(String thing)
    {
        System.out.println(nickname + "正在玩" + thing);
    }
    
/**
 * 發出聲音
 */
    
    public abstract void makeVoice();
    
}
  • 子類-Cat
package Day12_12_01;

public class Cat extends Pet
{
    private String colorOfEye;
    
    public Cat(String nickname, Sex sex,String colorOfEye)
    {
        super(nickname, sex);
        this.colorOfEye=colorOfEye;
    }
    
    public String getColorOfEye()
    {
        return colorOfEye;
    }
    
    public void climbUpTheTree()
    {
        //this可以換成super,或者去掉 
        System.out.println(this.getNickname()+"正在爬樹");
    }

    @Override
    public void makeVoice()
    {
        System.out.println(this.getNickname()+"喵喵叫");
    }
    
    

}
  • 子類Dog
package Day12_12_01;

/**
 * 狗類
 * 
 * @author YY
 *
 */
public class Dog extends Pet
{
    private boolean large;

    /**
     * 構造器
     * 
     * @param nickname
     * @param sex
     * @param large
     */
    public Dog(String nickname, Sex sex, boolean large)
    {
        super(nickname, sex);
        this.large = large;
    }

    /**
     * large的訪問器
     * 
     * @return
     */
    // 布爾類型的訪問器前綴不是get,而是is;
    public boolean isLarge()
    {
        return large;
    }

    /**
     * 看
     */
    public void keepTheDoor()
    {
        System.out.println(this.getNickname() + "正在看門");
    }

    public void makeVoice()
    {
        System.out.println(this.getNickname()+"汪汪叫");
    }

}
  • 子類Pig
package Day12_12_01;

public class Pig extends Pet
{
    private int weight;
    
    public Pig(String nickname, Sex sex,int weight)
    {
        super(nickname, sex);   
        this.weight=weight;
    }
    
    public int showWeight()
    {
        return this.weight;
    }
    @Override
    public void makeVoice()
    {
        System.out.println(this.getNickname()+"豬豬叫");
    }

}
  • 枚舉的定義
package Day12_12_01;

public enum Sex
{
    MALE,FEMLE
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文出自 Eddy Wiki ,轉載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,228評論 0 5
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • 1 面向對象No6 面向對象 OO Object Oriented 編程時以對象為單元,封裝數據和邏輯,以此提...
    征程_Journey閱讀 1,196評論 0 2
  • 這字,可以無視了,,,,,,看這字的筆法可以說是我從來沒寫過字
    在此皆我兒閱讀 241評論 0 2
  • 總有一天,要像你一樣,篤定的感謝自己 杭州的冬天,今年似乎格外冷一些。和學員伙伴們聊的頭腦悶悶的走出酒店,嗖嗖的冷...
    風四娘Rum閱讀 297評論 2 2