面向對象(四):this關鍵字,final關鍵字,抽象類,接口

this關鍵字

Java中提供了 this 關鍵字來指代當前對象,用於在方法中訪問對象的其他成員。

  • 通過 this 關鍵字調用成員方法,解決與局部變量名稱衝突問題
package com.wang.demo1;

public class Person {
    int age;              //成員變量 age

    public Person(int age) {  //局部變量 age
        this.age = age;    //將局部變量 age 的值賦給成員變量 age
    }
}

以上代碼,構造方法的參數被定義爲 age,是一個局部變量,在類中還定義了一個成員變量,名稱也是 age,使用“ this.age ”是訪問成員變量

  • 通過 this 關鍵字調用成員方法
package com.wang.demo1;

public class Person {
    public void say() {
        System.out.println();
    }
    
    public void go() {
        this.say();
    }
}

在上面的 go() 方法中,使用 this 調用了 say() 方法。需要注意的是,此處的 this 關鍵字可以省略不寫。

  • 通過 this 關鍵字調用構造方法
package com.wang.demo1;

public class Person {
    //無參構造方法
    public Person() {
        System.out.println("無參構造被調用了");
    }
    //有參構造方法
    public Person(int age) {
        this();               //調用無參構造方法
        System.out.println("有參構造被調用了");
    }

    public static void main(String[] args) {
        //實例化 Person 對象
        Person person = new Person(18);
    }
}

以上代碼中,在實例化 Person對象時,調用了有參的構造方法,在有參構造方法中又通過 this() 調用了無參的構造方法,運行結果中顯示兩個構造方法都被調用了。

this調用類的構造方法的注意點:

  • 只能在構造方法中使用 this 調用其他的構造方法,不能在成員方法中使用
  • 在構造方法中,使用 this 調用構造方法的語句必須是該方法的第一條執行語句,且只能出現一次
  • 不能在一個類的兩個構造方法中使用 this 互相調用

final 關鍵字

final 關鍵字用於修飾類,變量和方法,它有 “不可更改” 或者 “最終” 的含義,它有以下特點:

  • final 修飾的類不能被繼承
  • final 修飾的方法不能被子類重寫
  • final 修飾的變量(成員變量和局部變量)是常量,只能賦值一次

注意:局部變量使用 final 關鍵字時,可以在聲明變量的同時對變量進行賦值,也可以先聲明變量然後再進行有且只有一次的賦值。 當成員變量使用 final 關鍵字時,在聲明變量的同時必須進行初始化賦值,否則程序編譯報錯。

抽象類

  • abstract 修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類
  • 抽象類中可以沒有抽象方法,它可以有普通方法;但是有抽象方法的類,一定要聲明爲抽象類
  • 抽象類,不能使用 new 關鍵字來創建對象,不可以被實例化,它是用來讓子類繼承的
  • 抽象方法,只有方法的聲明,沒有方法的實現,它是用來讓子類實現的
  • 子類繼承抽象類,就必須要實現抽象類中沒有實現的抽象方法,否則該子類也要聲明爲抽象類
抽象類及抽象方法的格式:
    //定義抽象類
    修飾符 abstract class 類名 {
        //定義抽象方法
        public abstract 返回值類型 方法名();
        
        //其他方法或屬性
    }
package com.wang.demo2;
//定義抽象類
public abstract class Animal {
    //定義抽象方法
    public abstract void shout();
}
============================
package com.wang.demo2;
//定義 Dog類繼承抽象類 Animal
public class Dog extends Animal {
    //實現抽象方法 shout(),編寫方法體
    @Override
    public void shout() {
        System.out.println("汪汪。。。");
    }
}
============================
package com.wang.demo2;

public class Application {
    public static void main(String[] args) {
        Dog dog = new Dog(); //創建 Dog類實例對象
        dog.shout();
    }
}

接口

​如果一個抽象類中的所有方法都是抽象的,則可以將這個類定義爲接口。接口就是規範,定義一組規範。接口是種特殊的抽象類,它不能包含普通方法,裏面的所有方法都是抽象方法,它將抽象進行的更爲徹底。在 JDK 8 中,重新對接口定義,接口中除了抽象方法外,還可以有默認方法和靜態方法(也叫類方法)。默認方法使用 default 修飾,靜態方法使用 static 修飾,這兩種方法都允許有方法體。定義接口使用 interface 關鍵字。

​定義接口時,可以同時繼承多個父接口,實現多繼承。在接口內部可以定義多個常量和抽象方法,定義常量時必須進行初始化賦值。在接口中定義常量時可以省略 “public static final” 修飾符,在接口中定義抽象方法時可以省略 “public abstract” 修飾符。

​接口中可以包含三類方法:抽象方法,默認方法,靜態方法。靜態方法可以通過 “接口名.方法名” 調用,而抽象方法和默認方法只能通過接口實現類的實例對象類調用。需要定義一個接口的實現類,該類通過 implements 關鍵字實現當前接口,並實現當前接口的所有抽象方法,需要注意的是,一個類可以在繼承另一個類的同時實現多個接口,並且多個接口之間使用英文逗號分隔。

定義接口的實現類的語法格式:
    修飾符 class 類名 implements 接口名 {
        ...
    }

接口特點的歸納:

  • 在 JDK 8之前,接口中的方法必須都是抽象的,不能包含方法體。在調用抽象方法時,必須通過接口的實現類的對象才能調用實現方法。從 JDK 8開始,接口中的方法除了包含抽象方法以外,還包含默認方法和靜態方法,都可以有方法體,且靜態方法可以就直接通過 “接口名.方法名” 調用。
  • 一個類可以通過 implements 關鍵字同時實現多個接口,被實現的多個接口之間用英文逗號隔開。
  • 接口之間可以通過 extends 關鍵字實現繼承,一個接口可以同時繼承多個接口
  • 一個類在繼承一個類的同時還可以實現接口,此時, extends 關鍵字必須位於 implements 關鍵字之前。
package com.wang.demo3;

//接口使用 interface 關鍵字,接口都需要有實現類
public interface UserService {
    //接口中所有的方法都是抽象的,
    //方法修飾符 public abstract 可以省略

    public void add(String name); //增
    public void delete(String name); //刪
    public void update(String name); //改
    public void query(String name); //查
}
==================================
package com.wang.demo3;

//定義一個接口實現類 使用關鍵字 implements
public class UserServiceImpl implements UserService {
    //需要重寫接口裏面的抽象方法
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章