一.抽象類和抽象方法 (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,重寫方法指方法內實現的可以與父類不同
后期補充完善~