java基礎知識6-- 抽象類,抽象方法,接口,構造方法,類方法等易混淆的知識點


一.抽象類和抽象方法 (B 繼承  抽象類A)

抽象類:有抽象方法的一定是抽象類

抽象方法:方法名前有abstract修飾,且方法沒有方法體,即{},不需要實現任何功能,只是聲明

1.抽象類中的方法有兩種:

(1)抽象類中的普通方法,可以不必實現

(2)抽象方法,所屬的抽象類被繼承后,抽象方法必須被重寫,除非是被抽象類繼承,不必被

抽象類必須被繼承,且抽象類不能被實例化,即抽象類A ,不能定義 A a=new A() ;

 

package Interface;

/**
 * Created by wyy on 2017/2/25.
 */
public class abstractTest {

    public static void main(String[] args) {
        Person s = new Students(); //引用Students的對象
        Person t = new Teacher();//引用Teacher的對象
        s.f();
        t.f();   //我是一個學生    我是一個老師
    }
}
    abstract class Person {
        public abstract void f();  //聲明一個抽象類
    }

    class Students extends Person {   //類Students繼承抽象類
        public void f() {
            System.out.println("我是一個學生");
        }
    }

    class Teacher extends Person { //類Teacher繼承抽象類
        public void f() {
            System.out.println("我是一個老師");
        }
    }

二. 接口(B implements interface A)

實現接口的類,必須要實現接口內定義的所有方法.

先定義一個接口類Like

package Interface;

/**
 * Created by wyy on 2017/2/22.
 */

    public interface Like{
      public void a();
      public void b();

    }

接口類 Hate 

package Interface;

/**
 * Created by wyy on 2017/2/22.
 */
public interface Hate {
    public void c();
    public void d();

}

實現這兩個接口,必須實現接口內的所有方法:

public class A implements Like,Hate {

    @Override
    public void a(){
        System.out.println("this is a");
    }

    @Override
    public void b() {
        System.out.println("this is b");

    }
    @Override
    public void c() {
        System.out.println("this is c");
    }

    @Override
    public void d() {
        System.out.println("this is d");

    }
}

三. 構造方法和類方法

(1)構造方法,繼承(super,this 關鍵字)
構造方法:方法名和類名相同,一般用於創建對象的時候就賦值,常用於 this.name=name
  • 方法名與類名相同;
  • 不要返回類型(例如return、void等);
  • 不能被static、final、native、abstract和synchronized修飾,不能被子類繼承。
父類的構造方法不能被子類調用,可以通過super語句調用父類的構造方法。
用super調用父類的構造方法必須遵守以下規則:
1. 子類的構造方法中不能直接通過父類的方法名調用父類的構造方法,使用super語句;
2. 加入在子類的構造方法中有super語句,它必須作為構造方法的第一條語句(同this語句)
 
(2)類方法:用static修飾的方法,可以用類名直接調用,不用創建實例載引用
 
四.方法重載和方法重寫
 
(1)重載:overload 主要是針對類中同名的方法,但是其方法的參數類型,參數個數,參數順序,返回數據類型不同,如: void method(),void method(int i),void method(int a,int b),String method();最常用的重載便是System.out.println()
其實就是一個類中有多個名字一樣的方法,但是參數和返回值可能不一樣。
 (2)重寫:子類覆蓋父類的方法,或者實現借口的方法,其方法名稱,參數個數,參數類型,返回數據類型必須完全一致,另:重寫的方法拋出的異常不能比父類異常更廣(至少相同或是其異常的子類)。
其實一句話就是:
方法重載:就是在同一個類中,方法的名字相同,但參數個數、參數的類型或返回值類型不同!
方法重寫:它是指子類和父類的關系,子類重寫了父類的方法,但方法名、參數類型、參數個數必須相同!
 
方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載是一類中多態性的一種表現。
 
五.多態性
多態存在的三個必要條件
  • 繼承
  • 重寫(子類繼承父類,但是有自己不同的方法處理)
  • 父類引用指向子類對象
A extends B
B b=new A(); //父類引用指向子類對象
當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。
即:如果父類調用子類的方法,如果父類中沒有該方法,則會報錯
子類引用父類的方法用super,引用自己的方法用this,重寫方法指方法內實現的可以與父類不同
 
后期補充完善~

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM