繼承的概念
繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
繼承的主要作用在於,在已有基礎上繼續進行功能的擴充。
繼承的特性
子類擁有父類非private的屬性,方法。
子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。
子類可以用自己的方式實現父類的方法。
Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別於C++繼承的一個特性。
提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)。
接口類
在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。
接口並不是類,編寫接口的方式和類很相似,但是它們屬於不同的概念。類描述對象的屬性和方法。接口則包含類要實現的方法。
除非實現接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來聲明一個變量,他們可以成為一個空指針,或是被綁定在一個以此接口實現的對象。
接口與類的區別:
接口不能用於實例化對象。
接口沒有構造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了 static 和 final 變量。
接口不是被類繼承了,而是要被類實現。
接口支持多繼承。
定義格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
繼承關鍵字
繼承可以使用 extends 和 implements 這兩個關鍵字來實現繼承,而且所有的類都是繼承於 java.lang.Object,當一個類沒有繼承的兩個關鍵字,則默認繼承object(這個類在 java.lang 包中,所以不需要 import)祖先類。
extends關鍵字
在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。
extends格式
1 class 父類 { 2 } 3 4 class 子類 extends 父類 { 5 }
extends應用
父類:
1 public class Animal { 2 private String name; 3 private int id; 4 public Animal(String myName, int myid) { 5 name = myName; 6 id = myid; 7 } 8 public void eat(){ 9 System.out.println(name+"正在吃"); 10 } 11 public void sleep(){ 12 System.out.println(name+"正在睡"); 13 } 14 public void introduction() { 15 System.out.println("大家好!我是" + id + "號" + name + "."); 16 } 17 }
子類:
1 public class Mouse extends Animal { 2 public Mouse(String myName, int myid) { 3 } 4 }
父類中的方法已經被子類繼承,無需創建直接調用即可
implements關鍵字
使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)。
implements格式
1 public interface A { 2 public void eat(); 3 public void sleep(); 4 } 5 6 public interface B { 7 public void show(); 8 } 9 10 public class C implements A,B { 11 }
implements應用
接口:
public interface Smoking { //成員變量 public static final double a=3.14159; int b=7; //接口中的所有方法都是抽象方法 public abstract void smoke(); }
繼承:
1 public class Person implements Smoking { 2 3 @Override 4 public void smoke() { 5 System.out.println("抽煙"); 6 7 } 8 9 }
注意事項
1.接口不能創建對象,只能讓別人實現
2.接口中成員變量只能用public static final 修飾
公共 靜態 常量
public:公共的,在任何包任何類中都可以訪問
static:靜態的,只要被靜態修飾就可以通過 類名.屬性名/方法名() 調用
final:最終的, final修飾變量,則該變量就是一個常量,一次賦值終身不變
3.接口中如果不寫修飾符,默認給你添加修飾符,缺哪個添哪個
4.接口中的方法只能是 public abstract 修飾 缺哪個添哪個