国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)筆記-面向?qū)ο?/h1>

這篇具有很好參考價值的文章主要介紹了【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)筆記-面向?qū)ο?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)筆記-面向?qū)ο?/h2>

面向?qū)ο?1:什么是面向?qū)ο?/h2>

面向過程&面向?qū)ο?/h3>
  • 面向過程思想
    • 步驟清晰簡單,第一步做什么,第二步做什么....
    • 面對過程適合處理一些較為簡單的問題
  • 面向?qū)ο笏枷?
    • 物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然后對這些分類進(jìn)行單獨思考。最后,才對某個分類下的細(xì)節(jié)進(jìn)行面向過程的思索。
    • 面向?qū)ο筮m合處理復(fù)雜的問題,適合處理需要多人協(xié)作的問題!
  • 對于描述復(fù)雜的事物,為了從宏觀上把握、從整體上合理分析,我們需要使用面向?qū)ο蟮乃悸穪矸治稣麄€系統(tǒng)。但是,具體到微觀操作,仍然需要面向過程的思路去處理。

什么是面向?qū)ο?/h3>
  • 面向?qū)ο缶幊?Object-Oriented Programming, OOP)
  • 面向?qū)ο缶幊痰谋举|(zhì)就是:以類的方式組織代碼,以對象的組織(封裝)數(shù)據(jù)。
  • 抽象:編程思想!持續(xù)的學(xué)習(xí),茅塞頓開!多實踐,多測試大腦中的想法!實踐出真知~
  • 三大特性:
    • 封裝
    • 繼承
    • 多態(tài)
  • 從認(rèn)識論角度考慮是先有對象后有類。對象,是具體的事物。類,是抽象的,是對對象的抽象
  • 從代碼運行角度考慮是先有類后有對象。類是對象的模板。

面向?qū)ο?2:回顧方法的定義

回顧方法及加深

  • 方法的定義
    • 修飾符
    • 返回類型
    • break:跳出switch,結(jié)束循環(huán) 和 return的區(qū)別
    • 方法名:注意規(guī)范就OK 見名知意
    • 參數(shù)列表:(參數(shù)類型,參數(shù)名)...
    • 異常拋出:疑問,后面講解
  • 方法的調(diào)用:遞歸
    • 靜態(tài)方法
    • 非靜態(tài)方法
    • 形參和實參
    • 值傳遞和引用傳遞
    • this關(guān)鍵字
package com.oop.demo01;

import java.io.IOError;
import java.io.IOException;

//Demo01 類
public class Demo01 {
    //main 方法
    public static void main(String[] args) {

    }

    /*
    修飾符 返回值類型 方法名(...){
        //方法體
        return 返回值;
    }
     */
    //return 結(jié)束方法,返回一個結(jié)果!
    public String sayHello(){
        return "hello,world";
    }

    public void print(){
        return;
    }

    public int max(int a,int b){
        return a>b ? a : b; //三元運算符!
    }

    //數(shù)組下標(biāo)越界: Arrayindexoutofbounds

    public void readFile(String file) throws IOException{
        
    }
}

面向?qū)ο?3:回顧方法的調(diào)用

package com.oop.demo01;

public class Demo02 {
    public static void main(String[] args) {
//        //靜態(tài)方法 static
//        Student.say();

        //非靜態(tài)方法
        //實例化這個類 new
        //對象類型 對象名 = 對象值;
        Student student = new Student();
        student.say();
    }

    //static和類一起加載的
    public static void a(){
        //b();
    }

    //類實例化 之后才存在
    public void b(){

    }
}

學(xué)生說話了
package com.oop.demo01;

//學(xué)生類
public class Student {
//    //靜態(tài)方法
//    public static void say(){
//        System.out.println("學(xué)生說話了");
//    }

    //非靜態(tài)方法
    public void say(){
        System.out.println("學(xué)生說話了");
    }
}

package com.oop.demo01;

public class Demo03 {
    public static void main(String[] args) {
        //實際參數(shù)和形式參數(shù)的類型要對應(yīng)!
        int add = Demo03.add(1,2);
        System.out.println(add);
    }

    public static int add(int a,int b){
        return a+b;
    }
}

3
package com.oop.demo01;

//值傳遞
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a); //1

        Demo04.change(a);
        System.out.println(a); //1
    }

    //返回值為空
    public static void change(int a){
        a = 10;
    }
}

1
1
package com.oop.demo01;

//引用傳遞:對象

//對象,內(nèi)存!

public class Demo05 {
    public static void main(String[] args) {
        Perosn perosn = new Perosn();
        System.out.println(perosn.name); //null

        Demo05.change(perosn);
        System.out.println(perosn.name); //黎明の微笑
    }

    public static void change(Perosn perosn){
        //perosn是一個對象,指向的--->Perosn perosn = new Perosn(); 這是一個具體的人,可以改變屬性!
        perosn.name = "黎明の微笑";
    }
}

//定義了一個Perosn類,有一個屬性:name
class Perosn{
    String name; //null
}

null
黎明の微笑

面向?qū)ο?4:類與對象的創(chuàng)建

類與對象的關(guān)系

  • 類是一種抽象的數(shù)據(jù)類型,它是對某一類事物整體描述/定義,但是并不能代表某一個具體的事物.

    • 動物、植物、手機、電腦......
    • Person類、Pet類、Car類等,這些類都是用來描述/定義某一類具體的事物應(yīng)該具畝的特點和行為
  • 對象是抽象概念的具體實例

    • 張三就是人的一個具體實例,張三家里的旺財就是狗的一個具體實例。

    • 能夠體現(xiàn)出特點,展現(xiàn)出功能的是具體的實例,而不是一個抽象的概念.

我們可以將這些思想轉(zhuǎn)換為代碼實現(xiàn)!

創(chuàng)建與初始化對象

  • 使用new關(guān)鍵字創(chuàng)建對象
  • 使用new關(guān)鍵字創(chuàng)建的時候,除了分配內(nèi)存空間之外,還會給創(chuàng)建好的對象進(jìn)行默認(rèn)的初始化以及對類中構(gòu)造器的調(diào)用。
  • 類中的構(gòu)造器也稱為構(gòu)造方法,是在進(jìn)行創(chuàng)建對象的時候必須要調(diào)用的。并且構(gòu)造器有以下倆個特點:
    • 1.必須和類的名字相同
    • 2.必須沒有返回類型,也不能寫void
  • 構(gòu)造器必須要掌握
package com.oop.demo02;

//學(xué)生類
public class Student {
    //屬性:字段
    String name; //null
    int age; //0

    //方法
    public void study(){
        System.out.println(this.name+"在學(xué)習(xí)");
    }
}

//Person ---> 身高,體重,年齡,國家
//學(xué)程序好?對世界進(jìn)行更好的建模! --->宅! --->音樂,旅游,出國!

package com.oop.demo02;

//一個項目應(yīng)該只存一個main方法
public class Application {
    public static void main(String[] args) {
        //類:抽象的,實例化
        //類實例化后會返回一個自己的對象!
        // student對象就是一個student類的具體實例!

        Student xiaoming = new Student();
        Student xh = new Student();

        xiaoming.name = "小明";
        xiaoming.age = 3;

        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

        xh.name = "小紅";
        xh.age = 3;

        System.out.println(xh.name);
        System.out.println(xh.age);
    }
}

小明
3
小紅
3

面向?qū)ο?5:構(gòu)造器詳解

package com.oop.demo02;

//java ---> class
public class Person {
    //一個類即使什么都不寫,它也會存在一個方法
    //顯示的定義構(gòu)造器
    String name;
    int age;

    //alt + insert

    //實例化初始值
    //1.使用new關(guān)鍵字,本質(zhì)是在調(diào)用構(gòu)造器
    //2.用來初始化值
    public Person(){

    }

    //有參構(gòu)選:一旦定義了有參構(gòu)造,無參就必須顯示定義
    public Person(String name){
        this.name = name;
    }

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

/*
    public static void main(String[] args) {
        //new 實例化了一個對象
        Person person = new Person("liming",23);

        System.out.println(person.name); //liming
    }
 */

/*
構(gòu)造器:
    1.和類名相同
    2.沒有返回值
作用:
    1.new本質(zhì)在調(diào)用構(gòu)造方法
    2.初始化對象的值
注意點:
    1.定義有參構(gòu)造之后,如果想使用無參構(gòu)造,顯示的定義一個無參的構(gòu)造

ALt + Insert

this. =
 */

面向?qū)ο?6:創(chuàng)建對象內(nèi)存分析

package com.oop.demo03;

public class Pet {
    public String name;
    public int age;

    //無參構(gòu)造

    public void shout(){
        System.out.println("叫了一聲");
    }
}

/*
    public static void main(String[] args) {
        Pet dog = new Pet();

        dog.name = "旺財";
        dog.age = 3;
        dog.shout();

        System.out.println(dog.name);
        System.out.println(dog.age);

        Pet cat = new Pet();
    }
 */

【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)筆記-面向?qū)ο? referrerpolicy=

面向?qū)ο?7:簡單小結(jié)類與對象

/*
1.類與對象
	類是一個模板:抽象,對象是一個具體的實例
2.方法
	定義、調(diào)用!
3.對應(yīng)的引用
	引用類型:	基本類型(8)
	對象是通過引用來操作的:棧 ---> 堆
4.屬性:字段 Field 成員變量
	默認(rèn)初始化:
		數(shù)字:0	0.0
		char:u0000
		boolean:false
		引用:nuLL
	修飾符 屬性類型 屬性名 = 屬性值!
5.對象的創(chuàng)建和使用
	- 必須使用 new 關(guān)鍵字創(chuàng)造對象,構(gòu)造器 Person kuangshen = new Person();
	- 對象的屬性 kuangshen.name
	- 對象的方法 kuangshen.sleep()
6.類
	靜態(tài)的屬性 屬性
	動態(tài)的行為 方法

`封裝、繼承、多態(tài)`
*/

面向?qū)ο?8:封裝詳解

封裝

  • 該露的露,該藏的藏
    • 我們程序設(shè)計要追求“高內(nèi)聚,低耦合”。高內(nèi)聚就是類的內(nèi)部數(shù)據(jù)操作細(xì)節(jié)自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用。
  • 封裝(數(shù)據(jù)的隱藏)
    • 通常,應(yīng)禁止直接訪問一個對象中數(shù)據(jù)的實際表示,而應(yīng)通過操作接口來訪問,這稱為信息隱藏。
  • 記住這句話就夠了:屬性私有,get/set
package com.oop.demo04;

//類     private:私有
public class Student {
    //屬性私有
    private String name; //名字
    private int id; //學(xué)號
    private char sex; //性別
    private int age; //年齡

    //提供一些可以操作這個屬性的方法!
    //提供一些 public 的 get、set 方法

    //get 獲得這個數(shù)據(jù)
    public String getName(){
        return this.name;
    }

    //set 給這個數(shù)據(jù)設(shè)置值
    public void setName(String name){
        this.name = name;
    }

    //alt + insert

    public int getId() {
        return id;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
    
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age>120 || age<0){ //不合法
            this.age = 3;
        }else {
            this.age = age;
        }
    }
}

/*
1. 提高程序的安全性,保護(hù)數(shù)據(jù)
2. 隱藏代碼的實現(xiàn)細(xì)節(jié)
3. 統(tǒng)一接口
4. 系統(tǒng)可維護(hù)增加了
 */

/*
    public static void main(String[] args) {
        Student s1 = new Student();

        s1.setName("黎明の微笑");
        System.out.println(s1.getName());

        s1.setAge(-1); //不合法的
        System.out.println(s1.getAge());
    }
 */

面向?qū)ο?9:什么是繼承

繼承

  • 繼承的本質(zhì)是對某一批類的抽象,從而實現(xiàn)對現(xiàn)實世界更好的建模。

  • extends的意思是“擴展”。子類是父類的擴展。

  • JAVA中類只有單繼承,沒有多繼承!一個兒子只能有一個爸爸,但是一個爸爸可以有多個兒子

  • 繼承是類和類之間的一種關(guān)系。除此之外,類和類之間的關(guān)系還有依賴、組合、聚合等。

  • 繼承關(guān)系的倆個類,一個為子類(派生類)一個為父類(基類)。子類繼承父類,使用關(guān)鍵字extends來表示。

  • 子類和父類之間,從意義上講應(yīng)該具有"is a"的關(guān)系。

  • object類

  • super

  • 方法重寫:重點--->多態(tài)

package com.oop.demo05;

//在Java中,所有的類,都默認(rèn)直接或者間接繼承Object
//Person 人 : 父類
public class Person /*extends Object*/ {
    //public
    //protected
    //default
    //private
    private int money = 10_0000_0000;

    public void say(){
        System.out.println("說了一句話");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

/*
ctrl + H 樹
 */

/*
    public static void main(String[] args) {

        Person person = new Person();

        Student student = new Student();
        student.say();
        System.out.println(student.getMoney());
    }
 */

package com.oop.demo05;

//Student is 人 : 派生類,子類
//子類繼承了父類,就會擁有父類的全部方法!
public class Student extends Person {
}

package com.oop.demo05;

//Teacher is 人 : 派生類,子類
public class Teacher extends Person {
}

面向?qū)ο?0:Super詳解

super注意點:

  1. super 調(diào)用父類的構(gòu)造方法,必須在構(gòu)造方法的第一個
  2. super 必須只能出現(xiàn)在子類的方法或者構(gòu)造方法中!
  3. super 和 this不能同時調(diào)用構(gòu)造方法!

Vs this:

代表的對象不同:

? this:本身調(diào)用者這個對象

? super:代表父類對象的應(yīng)用

前提

? this:沒喲繼承也可以使用

? super:只能在繼承條件才可以使用

構(gòu)造方法

? this();本類的構(gòu)造

? super();父類的構(gòu)造!

package com.oop.demo05;

public class Person /*extends Object*/ {
    public Person() {
        System.out.println("Person無參執(zhí)行了");
    }

//    public Person(String name) {
//        System.out.println("Person有參執(zhí)行了");
//    }

    protected String name = "liming";

    //私有的東西無法被繼承!
    public void print(){
        System.out.println("Person");
    }

}

/*
    public static void main(String[] args) {
        Student student = new Student();

        //student.test1();

        //student.test("微笑");

    }
 */

package com.oop.demo05;

public class Student extends Person {
    public Student() {
        //隱敲代碼:調(diào)川了父類的無參構(gòu)選
        super(); //調(diào)用父類的構(gòu)造器,必須要在子類構(gòu)造器的第一行
        //this("hello");
        System.out.println("Student無參執(zhí)行了");

//        super("name");
//        System.out.println("Student有參執(zhí)行了");
    }

    public Student(String name) {
        this.name = name;
    }

    private String name = "weixiao";

    public void print(){
        System.out.println("Student");
    }

//    public void test1(){
//        print(); //Student
//        this.print(); //Student
//        super.print(); //Person
//    }

//    public void test(String name){
//        System.out.println(name); //微笑
//        System.out.println(this.name); //weixiao
//        System.out.println(super.name); //liming
//    }
}

面向?qū)ο?1:方法重寫

重寫:需要有繼承關(guān)系,子類重寫父類的方法!

? 1.方法名必須相同

? 2.參數(shù)列表列表必須相同

? 3.修飾符:范圍可以擴大但不能縮小: public>Protected>Default>private

? 4.拋出的異常:范圍,可以被縮小,但不能擴大; ClassNotFoundException ---> Exception(大)

重寫,子類的方法和父類必要一致;方法體不同!

為什么需要重寫:

? 1.父類的功能,子類不一定需要,或者不一定滿足!Alt + Insert ; override;

package com.oop.demo05;

//重寫都是方法的重寫,和屬性無關(guān)
public class B {
//    public static void test(){
//        System.out.println("B=>test()");
//    }

    public void test(){
        System.out.println("B=>test()");
    }
}

/*
    //靜態(tài)的方法和非靜態(tài)的方法區(qū)別很大!
        //靜態(tài)方法://方法的調(diào)用只和左邊,定義的數(shù)據(jù)類型有關(guān)
    //非靜態(tài):重寫

    public static void main(String[] args) {
        A a = new A();
        a.test(); //A

        //父類的引川指向了子類
        B b = new A(); //子類重寫了父類的方法
        b.test(); //B
    }
 */

package com.oop.demo05;

//繼承
public class A extends B {
//    public static void test(){
//        System.out.println("A=>test()");
//    }

    //Override 重寫
    @Override //注解:有功能的注釋!
    public void test() {
        System.out.println("A=>test()");
    }
}

面向?qū)ο?2:什么是多態(tài)

多態(tài)

  • 即同一方法可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。
  • 一個對象的實際類型是確定的,但可以指向?qū)ο蟮囊玫念愋陀泻芏?父類,有關(guān)系的類)
  • 多態(tài)存在的條件
    • 有繼承關(guān)系
    • 子類重寫父類方法
    • 父類引用指向子類對象
  • 注意:多態(tài)是方法的多態(tài),屬性沒有多態(tài)性。
  • instanceof (類型轉(zhuǎn)換) 引用類型,判斷一個對象是什么類型~
package com.oop.demo06;

public class Person {
    public void run(){
        System.out.println("run");
    }
}

/*
多態(tài)注意事項:
1. 多態(tài)是方法的多態(tài),屬性沒有多態(tài)
2. 父類和子類,有聯(lián)系類型轉(zhuǎn)換異常! ClassCastException!
3. 存在條件:繼承關(guān)系,方法需要重寫,父類引用指向子類對象! Father f1 = new Son();

    1. static 靜態(tài)方法,屬于類,它不屬于實例
    2. final 常量;
    3. private 私有方法;
 */

/*
    public static void main(String[] args) {
        //一個對象的實際類型是確定的
        //new Student();
        //new Person();

        //可以指向的引川類型就不確定了:父類的引用指向子類

        //Student 子類型,能調(diào)用的方法都是自己的或者然承父類的!
        Student s1 = new Student();
        //Person 父類型,可以指向了類,但是不能調(diào)用子類獨有的方法
        Person s2 = new Student();
        Object s3 = new Student();

        //對象能執(zhí)行哪些方法,主要看對象左邊的類型,和右邊關(guān)系不大!
        s2.run(); //子類重寫了父類的方法,執(zhí)行子類的方法
        s1.run();

        //s2.eat();
        ((Student) s2).eat();
        s1.eat();
    }
 */

package com.oop.demo06;

public class Student extends Person {
    @Override
    public void run() {
        System.out.println("son");
    }

    public void eat(){
        System.out.println("eat");
    }
}

面向?qū)ο?3:instanceof和類型轉(zhuǎn)換

package com.oop.demo06;

public class Person {
    public void run(){
        System.out.println("run");
    }
}

/*
    public static void main(String[] args) {
        //Object > Person > Student
        //Object > Person > Teacher
        //Object > String

        //System.out.println(X instanceof Y); //能不能編譯通過!

        Object object = new Student();
        System.out.println(object instanceof Student); //true
        System.out.println(object instanceof Person); //true
        System.out.println(object instanceof Object); //true
        System.out.println(object instanceof Teacher); //false
        System.out.println(object instanceof String); //false
        System.out.println("====================");

        Person person = new Student();
        System.out.println(person instanceof Student); //true
        System.out.println(person instanceof Person); //true
        System.out.println(person instanceof Object); //true
        System.out.println(person instanceof Teacher); //false
        //System.out.println(person instanceof String); //編譯報錯!
        System.out.println("====================");

        Student student = new Student();
        System.out.println(student instanceof Student); //true
        System.out.println(student instanceof Person); //true
        System.out.println(student instanceof Object); //true
        //System.out.println(student instanceof Teacher); //編譯報錯!
        //System.out.println(student instanceof String); //編譯報錯!
    }
 */

/*
    public static void main(String[] args) {
        //類型之間的轉(zhuǎn)化:父     子

//        //高                  低
//        Person obj = new Student();
//
//        //student將這個對象轉(zhuǎn)換為Student類型,我們就可以使川Student類型的方法了!
//        Student student = (Student) obj;
//        student.go();
//        //((Student) obj).go();

        //子類轉(zhuǎn)換為父類,可能丟失自己的本來的一些方法!
        Student student = new Student();
        student.go();
        Person person = student;
    }
 */

/*
1. 父類引用指向子類的對象
2. 把子類轉(zhuǎn)換為父類,向上轉(zhuǎn)型;
3. 把父類轉(zhuǎn)換為子類,向下轉(zhuǎn)型; 強制轉(zhuǎn)換
4. 方便方法的調(diào)用,減少重復(fù)的代碼!簡介

封裝、繼承、多態(tài)!   抽象類,接口
 */

package com.oop.demo06;

public class Student extends Person {
    public void go(){
        System.out.println("go");
    }
}

package com.oop.demo06;

public class Teacher extends Person {

}

面向?qū)ο?4:static關(guān)鍵字詳解

package com.oop.demo07;

//static
public class Student {
    private static int age; //靜態(tài)的變量     多線程!
    private double score; //非靜態(tài)的變量

    public void run(){

    }

    public static void go(){

    }

    public static void main(String[] args) {
//        Student s1 = new Student();
//
//        System.out.println(Student.age);
//        //System.out.println(Student.score);
//        System.out.println(s1.age);
//        System.out.println(s1.score);

        //run();
        go();
    }
}

package com.oop.demo07;

public class Person {
    //2:賦初值~
    {
        //代碼塊(匿名代碼塊)
        System.out.println("匿名代碼塊");
    }


    //1:只執(zhí)行一次~
    static {
        //靜態(tài)代碼塊
        System.out.println("靜態(tài)代碼塊");
    }

    //3
    public Person() {
        System.out.println("構(gòu)造方法");
    }

    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("====================");
        Person person2 = new Person();
    }
}

靜態(tài)代碼塊
匿名代碼塊
構(gòu)造方法
====================
匿名代碼塊
構(gòu)造方法
package com.oop.demo07;

//靜態(tài)導(dǎo)入包~
import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Test {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}

面向?qū)ο?5:抽象類

抽象類

  • abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那么該方法就是抽象方法;如果修飾類,那么該類就是抽象類。
  • 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要聲明為抽象類。
  • 抽象類,不能使用new關(guān)鍵字來創(chuàng)建對象,它是用來讓子類繼承的。
  • 抽象方法,只有方法的聲明,沒有方法的實現(xiàn),它是用來讓子類實現(xiàn)的。
  • 子類繼承抽象類,那么就必須要實現(xiàn)抽象類沒有實現(xiàn)的抽象方法,否則該子類也要聲明為抽象類。
package com.oop.demo08;

//abstract 抽象類:類 extends    單繼承~    (接口可以多繼承)
public abstract class Action {
    //約束~有人幫我們實現(xiàn)~
    //abstract 抽象方法,只有方法名字,沒有方法的實現(xiàn)!
    public abstract void doSomething();

    //1. 不能new這個抽象類,只能靠子類去實現(xiàn)它;約束!
    //2. 抽象類中可以寫普通的方法~
    //3. 抽象方法必須在抽象類中~
    //抽象的抽象:約束~

    //思考題?
    //new,存在構(gòu)造器么? (存在)
    //抽象類存在的意義      抽象出來~       提高開發(fā)效率
}

package com.oop.demo08;

//抽象類的所有方法,繼承了它的子類,都必須要實現(xiàn)它的方法~ 除非子類也是抽象的(abstract)~
public class A extends Action {
    @Override
    public void doSomething() {

    }
}

面向?qū)ο?6:接口的定義與實現(xiàn)

接口

  • 普通類:只有具體實現(xiàn)
  • 抽象類:具體實現(xiàn)和規(guī)范(抽象方法)都有!
  • 接口:只有規(guī)范!自己無法寫方法專業(yè)的約束!約束和實現(xiàn)分離:面向接口編程
  • 接口就是規(guī)范,定義的是一組規(guī)則,體現(xiàn)了現(xiàn)實世界中“如果你是...則必須能…”的思想。如果你是天使,則必須能飛。如果你是汽車,則必須能跑。如果你好人,則必須干掉壞人;如果你是壞人,則必須欺負(fù)好人。
  • 接口的本質(zhì)是契約,就像我們?nèi)碎g的法律一樣。制定好后大家都遵守。
  • OO的精髓,是對對象的抽象,最能體現(xiàn)這一點的就是接口。為什么我們討論設(shè)計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設(shè)計模式所研究的,實際上就是如何合理的去抽象。

聲明類的關(guān)鍵字是class,聲明接口的關(guān)鍵字是interface文章來源地址http://www.zghlxwxcb.cn/news/detail-652815.html

作用:
    1. 約束
    2. 定義一些方法,讓不同的人實現(xiàn)~ 10 ---> 1
    3. public abstract
    4. public static final
    5. 接口不能被實例化~,接口中沒有構(gòu)造方法~
    6. implements可以實現(xiàn)多個接口
    7. 必須要重寫接口中的方法~
    8. 總結(jié)博客~
package com.oop.demo09;

//抽象的思維~ Java 架構(gòu)師~

//interface 定義的關(guān)鍵字 , 接口都需要有實現(xiàn)類
public interface UserService {
    //常量~ public static final
    int AGE = 99;

    //接口中的所有定義的方法其實都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

package com.oop.demo09;

//抽象類:extends~
//類 可以實現(xiàn)接口 implements 接口
//父現(xiàn)了接口的類,就需要重寫接口中的方法~

//多繼承~利用接口實現(xiàn)多繼承~
public class UserServiceImpl implements UserService,TimeService {
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timer() {

    }
}

package com.oop.demo09;

public interface TimeService {
    void timer();
}

面向?qū)ο?7:N種內(nèi)部類

內(nèi)部類

  • 內(nèi)部類就是在一個類的內(nèi)部在定義一個類,比如,A類中定義一個B類,那么B類相對A類來說就稱為內(nèi)部類,而A類相對B類來說就是外部類了。
  • 1.成員內(nèi)部類
  • 2.靜態(tài)內(nèi)部類
  • 3.局部內(nèi)部類
  • 4.匿名內(nèi)部類
package com.oop.demo10;

public class Outer {
    private int id=10;

    public void out(){
        System.out.println("這是外部類的方法");
    }

    public class Inner{
        public void in(){
            System.out.println("這是內(nèi)部類的方法");
        }

        //獲得外部類的私有屬性~
        public void getID(){
            System.out.println(id);
        }
    }

    //局部內(nèi)部類
    public void method(){
        class Inner{
            public void in(){

            }
        }
    }
}

//一個java類中可以有多個class類,但是只能有一個public class
class A{
    public static void main(String[] args) {

    }
}

/*
    public static void main(String[] args) {
        //new
        Outer outer = new Outer();

        //通過這個外部類來實例化內(nèi)部類~
        Outer.Inner inner = outer.new Inner();
        inner.in();
        inner.getID();
    }
 */

package com.oop.demo10;

public class Test {
    public static void main(String[] args) {
        //沒有名字初始化類,不用將實例保存到變量中~
        new Apple().eat();
        UserService userService = new UserService() {

            @Override
            public void hello() {

            }

        };
    }
}

class Apple{
    public void eat(){
        System.out.println("1");
    }
}

interface UserService{
    void hello();
}

【【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)視頻通俗易懂】https://www.bilibili.com/video/BV12J41137hu?p=60&vd_source=fd5defd6aaa826e3b6e0c06073353e32

到了這里,關(guān)于【狂神說Java】Java零基礎(chǔ)學(xué)習(xí)筆記-面向?qū)ο蟮奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包