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

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

抽象類:有抽象方法的必定是抽象類ide

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

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

(1)抽象類中的普通方法,能夠沒必要實現code

(2)抽象方法,所屬的抽象類被繼承後,抽象方法必須被重寫,除非是被抽象類繼承,沒必要被對象

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

 

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)繼承

實現接口的類,必需要實現接口內定義的全部方法.接口

先定義一個接口類Likeget

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,重寫方法指方法內實現的能夠與父類不一樣
 
後期補充完善~
相關文章
相關標籤/搜索