day5-java基礎(抽象、繼承等)

抽象:主要是在觀察事物的時候,將發(fā)現(xiàn)的共有屬性,向上抽取。


走路:兩條腿來回擺。外八、內(nèi)八、腳跟不著地
吃東西:上牙咬下牙。吧唧、直接吞、細嚼慢咽
打架:先喊,再動手,最后出腳,實在不行,咬。詠春、太極拳、泰拳、亂來

抽象其實很簡單,只是提供規(guī)范,不提供細節(jié)。

抽象類的特點

  1. 抽象類和抽象方法都需要使用 abstract 關鍵來修飾
  2. 抽象方法只能在抽象類中書寫。
  3. 抽象類不能單獨創(chuàng)建,因為單獨創(chuàng)建沒有任何用,需要使用子類來繼承并且實現(xiàn)方法。
  4. 創(chuàng)建好子類,必須要將抽象類中的方法進行實現(xiàn),然后才能夠進行實例化使用。

1.創(chuàng)建抽象類,聲明抽象方法

public abstract class Employee {
    
    // 聲明一個抽象方法,需要使用 abstract 關鍵字來修飾
    public abstract void working();

}
子類繼承抽象類,實現(xiàn)抽象方法
public class JavaCoder extends Employee {

    @Override
    public void working() {
        System.out.println("我是一個令 PHP 羨慕的 Java 工程師...");
    }

}

2.封裝

public class Naming2 {

    // 1. 接收并且存儲同學的信息(名字、年齡)
    // 2. 獲取并展示同學的信息
    // 3. 實現(xiàn)隨機點名
    
    // 定義一個集合來存儲學生的信息
    ArrayList<User> userList = new ArrayList<User>();
    
    
    @Test
    public void test(){
        
        // 存儲數(shù)據(jù)
        addUser();
        
        // 獲取并且展示
        showUsers(userList);
        
        // 隨機點名
        randomUser(userList);
    }
    
    // 3. 實現(xiàn)隨機點名
    public void randomUser(ArrayList<User> userList){
        
        // 獲取集合的長度,作為隨機的范圍,進行隨機
        int index = new Random().nextInt(userList.size());
        
        // 根據(jù)得到的隨機值,作為下標值去訪問集合中的元素
        User user = userList.get(index);
        
        // 打印信息
        System.out.println("請 "+ user.getName() +" 同學起來拖地...");
        
    }
    
    // 2. 獲取并展示同學的信息
    public void showUsers(ArrayList<User> userList){
        
        for (User user : userList) {
            System.out.println("姓名:"+ user.getName() +",年齡:" + user.getAge());
        }
        
    }

    
    // 1. 接收并且存儲同學的信息(名字、年齡)
    public void addUser(){
        
        // 創(chuàng)建 Scanner 實例,用于接收信息的錄入
        Scanner scan = new Scanner(System.in);      
        
        // 設置需要加五個學生
        for(int i = 0; i < 3; i++){
            
            // 創(chuàng)建 User 實例
            User user = new User();
            
            // 接收學生的名字信息
            System.out.println("現(xiàn)在接收第"+ i +"個學生,名字為:");
            user.setName(scan.next()); 
            
            System.out.println("現(xiàn)在接收第"+ i +"個學生,年齡為:");
            user.setAge(scan.nextInt());

            // 將接收好的學生數(shù)據(jù),放在集合中進行存儲起來
            userList.add(user);
        }
    }
    
}

學生類

public class User {
    
    // 學生的名字
    private String name;
    // 學生的年齡
    private int age;
    
    // get 和 set 方法
    // 第一種方式:快捷鍵添加 alt + shift + s
    // 第二種方式:右鍵 → Source → getters and setters
    
    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;
    }
}

3.繼承

package com.hello.jicheng;

import org.junit.Test;

public class Demo {
    
    // 有個爹,干爹,爺爺,干爺爺
    // 繼承他的財產(chǎn),瞬間高大上。
    
    // 繼承:大包小,小包微
    // 公司:
    
    @Test
    public void test(){
        
        // 創(chuàng)建 JavaCoder 實例
        JavaCoder java = new JavaCoder();
        java.working();
        // 就算沒有重寫父類的方法,也可以直接使用父類中方法
        // 如果子類重寫了,其實也就是在原來的基礎之上增強了
        java.sayHello();
        
        System.out.println("---------- 超完美的分割線 -----------");
        
        // 初始化子類之后,將實例賦值給父類類型變量
        Employee e = new JavaCoder();
        // 再調(diào)用方法
        e.working(); 
    }
}

員工類

public class Employee {

    // 員工姓名
    private String name;
    
    // 定義一個變量
    int money = 2000;

    // get 和 set
    public String getName() {
        return name;
    }

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

    // 員工工作
    public void working() {
        System.out.println("每天都愉快地工作...");
    }
    
    public void sayHello(){
        System.out.println("我是一個超級好員工...");
    }
}

員工類的子類

// 我們使用 extends 關鍵字,來繼承指定的 Employee 父類(超類)
public class JavaCoder extends Employee {
    
    int money = 10000;

    // @Override 主要是用來聲明,當前方法是從父類中重寫(重新寫了一遍,照搬父類的)出來的
    @Override
    public void working() {
        
        // super 關鍵字,代表是父類的實例,主要是用來調(diào)用父類中的東西。
        // super.working();
        
        // 要使用父類中的同名變量
        System.out.println("父類中的 money:" + super.money);
        
        // 要使用子類中的同名變量
        System.out.println("子類中的 money:" + this.money);
        
        // 我在子類中,新加入的一個功能
        System.out.println("我是員工,屬于 Java 開發(fā)小組,我會寫 Java 代碼...");
    }
    
     繼承的使用注意點:
     宗旨:子類,永遠比父類牛。子類的功能更加豐富,子類在開發(fā)中,主要是用來增強功能的。
     1. 在 Java 開發(fā)中,類只支持單繼承,不支持多繼承。只能是有一個直接的父類。
            A extends B 對的,A extends B,C,D 錯的
     2. 多個類可以同時繼承一個父類。
          A extends C, B extends C 對的
     3. 也支持多層繼承,子類的父類還可以去繼承另一個父類
          A extends B,B extends C, C extends D
     4. 子類和父類其實是一個相對的概念,一個類可以是某個類的父類,也可以是另外一個類的子類。
}

4.對象

①:demo

public class Demo {

    @Test
    public void test(){
        
        // 實例化
        Gril g = new Gril();
        g.name = "翠花";
        
        // 實例化
        Bus bus = new Bus();
        bus.openDoor();
        bus.shangChe(g.name);
        bus.closeDoor();
        bus.run();
        
        // 打車去北京
        // 面向?qū)ο螅荷宪?,告訴司機,我要去北京,之后就睡覺就好。
        // 至于怎么去北京,不關調(diào)用者的事情
        // 去北京的功能實現(xiàn)在司機腦袋中
        // 把實現(xiàn)的細節(jié)放到一個外部調(diào)用者直接訪問不到的地方,這些細節(jié)調(diào)用者不需要關心,直接執(zhí)行功能即可。
        // 面向?qū)ο笏枷胫?—— 封裝、繼承、多態(tài)
        
        // 如果我們給類的字段或者方法設置了 public 訪問權限修飾符,則所有的調(diào)用者都可以訪問,并且修改。
        // 這樣不利于對象隱藏實際的實現(xiàn)細節(jié)。
        // 我們可以使用另外一個私有的訪問權限修飾符 —— private,后面,我們都要使用 private 來修飾字段和方法。
        User user = new User();
        // 如果我們這樣賦值的話,太危險了,數(shù)據(jù)安全隱患太大
        // 我們應該在賦值之后,找一個機會來做判斷,如果數(shù)據(jù)是安全和合法的話,再繼續(xù)給它設置
        // user.name = "人妖";
        // user.age = 1000;
        
        // getXxx() 獲取xxx   setXxx() 設置xxx
        user.setName("翠花");
        user.setAge(1000);
        
        user.sayHello();    
    
    }
}

②:bus

public class Bus {

    // 字段
    String busNo;
    String lun;
    
    // 方法
    public void run(){
        System.out.println("我開得賊快,xx追不上...");
    }
    
    public void openDoor(){
        System.out.println("車門開了");
    }
    
    public void closeDoor(){
        System.out.println("車門關了");
    }
    
    public void shangChe(String name){
        System.out.println(name + " 坐上車了..");
    }
}

③:girl

public class Gril {
    
    // 字段
    String name;
    int age;
    
    // 方法
    public void sitBus(){
        System.out.println("我會背對你們坐公交...");
    }

}

④:user

public class User {
    
    // 此處的字段,如果沒有顯示寫出訪問權限符的話,默認是使用 public 
    // 成員變量
    private String name;
    private int age;
    
    // 添加 get 和 set 方法
    public void setName(String name){
        // 局部變量
        // this 代表的是當前類,主要可以作用在區(qū)別成員和局部變量上
        this.name = name;
    }
    public void setAge(int age){
        
        if(age > 120){
            System.out.println("哥們兒,你確定還是一個人嗎?");
            return;
        }
        this.age = age;
    }
    
    public String getName(){
        return name;
    }

    public int getAge(){
        return age;
    }
    
    public void sayHello(){
        
        System.out.println("叫"+ name +"的那個同學,"+ age +"歲了...");
        
    }
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 設計模式概述 在學習面向?qū)ο笃叽笤O計原則時需要注意以下幾點:a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上,這兩者...
    彥幀閱讀 3,888評論 0 14
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,692評論 18 399
  • 參考資料:菜鳥教程之設計模式 設計模式概述 設計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗...
    Steven1997閱讀 1,272評論 1 12
  • 好詞: 古稀之年 栩栩如生 淋漓盡致 迥然不同 袒胸露背 未老先衰 冷峻深邃 煙消云散 毫無瑕疵 惻...
    暮慎閱讀 208評論 0 0
  • 今天開始用vs code 編寫前端網(wǎng)頁 1.什么是HTML和CSS 2.常用的HTML標簽 3.常用的CSS樣式 ...
    折翼自由閱讀 172評論 0 1

友情鏈接更多精彩內(nèi)容