Java继承 implements 与 extends 总结
關(guān)鍵字implements是一個(gè)類,實(shí)現(xiàn)一個(gè)接口用的關(guān)鍵字,它是用來實(shí)現(xiàn)接口中定義的抽象方法。實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口中的所有方法。使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號(hào)分隔)
還有幾點(diǎn)需要注意:
(1)接口可以被多重實(shí)現(xiàn)(implements),抽象類只能被單一繼承(extends)
(2)接口只有定義,抽象類可以有定義和實(shí)現(xiàn)
(3)接口的字段定義默認(rèn)為:public static final,?抽象類字段默認(rèn)是”friendly”(本包可見)
舉如下例子:
定義兩個(gè)接口Bread、Milk并(implements)單一實(shí)現(xiàn)
多重實(shí)現(xiàn)?依照上面定義的接口進(jìn)行多重實(shí)現(xiàn)
public class Man implements Bread,Milk{//實(shí)現(xiàn)了Bread接口中eatBread方法public void eatBread(){System.out.println("吃面包");} //實(shí)現(xiàn)了Milk接口中drinkMilk方法public void drinkMilk(){System.out.println("喝牛奶");} }這就是接口的多重實(shí)現(xiàn)了
關(guān)于接口的作用:
接口是軟件編程的規(guī)范,可以降低耦合性,換句話說,可以讓某個(gè)模塊或功能能夠重復(fù)利用,這樣只要寫這功能一次代碼就ok了。其他地方要用到的,全部用接口調(diào)用來實(shí)現(xiàn)
接口的優(yōu)勢(shì):
1. “接口+實(shí)現(xiàn)”最常見的優(yōu)勢(shì)就是實(shí)現(xiàn)類和接口分離,在更換實(shí)現(xiàn)類的時(shí)候,不用更換接口功能。
2. 這對(duì)于做單元測(cè)試也非常有幫助。
關(guān)鍵字extends,表示對(duì)父類的繼承,可以實(shí)現(xiàn)父類,也可以調(diào)用父類初始化。而且會(huì)覆蓋父類定義的變量或者函數(shù)。在 Java 中,類的繼承是單一繼承,也就是說,一個(gè)子類只能擁有一個(gè)父類,所以 extends 只能繼承一個(gè)類。
類的繼承格式
為什么需要繼承
接下來我們通過實(shí)例來說明這個(gè)需求。
開發(fā)動(dòng)物類,其中動(dòng)物分別為企鵝以及老鼠,要求如下:
企鵝:屬性(姓名,id),方法(吃,睡,自我介紹)
老鼠:屬性(姓名,id),方法(吃,睡,自我介紹)
企鵝類
public class Penguin { private String name; private int id; public Penguin(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號(hào)" + name + "."); } }老鼠類
public class Mouse { private String name; private int id; public Mouse(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號(hào)" + name + "."); } }從這兩段代碼可以看出來,代碼存在重復(fù)了,導(dǎo)致后果就是代碼量大且臃腫,而且維護(hù)性不高(維護(hù)性主要是后期需要修改的時(shí)候,就需要修改很多的代碼,容易出錯(cuò)),所以要從根本上解決這兩段代碼的問題,就需要繼承,將兩段代碼中相同的部分提取出來組成 一個(gè)父類:
公共父類
public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid;} public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號(hào)" + name + "."); } }這個(gè)Animal類就可以作為一個(gè)父類,然后企鵝類和老鼠類繼承這個(gè)類之后,就具有父類當(dāng)中的屬性和方法,子類就不會(huì)存在重復(fù)的代碼,維護(hù)性也提高,代碼也更加簡(jiǎn)潔,提高代碼的復(fù)用性(復(fù)用性主要是可以多次使用,不用再多次寫同樣的代碼) 繼承之后的代碼:
企鵝類
老鼠類
public class Mouse extends Animal { public Mouse(String myName, int myid) { super(myName, myid); } }這里super
在繼承關(guān)系中,父類的成員變量、局部變量、方法被隱藏被子類常常覆蓋,這時(shí)需要引用父類成員變量、局部變量、方法。
super.變量名,super.方法名,super.父類的構(gòu)造方法;
這里還引入一個(gè)關(guān)鍵字this的用法
如果類的成員變量與局部變量重名,類的成員變量將被隱藏,如果要使用類的成員變量,需要使用this引用之。
this.變量名,this.方法名,this.父類的構(gòu)造方法;
繼承的特性
1.子類擁有父類非private的屬性,方法。
2.子類可以擁有自己的屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
3.子類可以用自己的方式實(shí)現(xiàn)父類的方法。
Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關(guān)系就是C類是B類的父類,B類是A類的父類,這是java繼承區(qū)別于C++繼承的一個(gè)特性。
4.提高了類之間的耦合性(繼承的缺點(diǎn),耦合度高就會(huì)造成代碼之間的聯(lián)系)。
總結(jié)
以上是生活随笔為你收集整理的Java继承 implements 与 extends 总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python字典类型内部做判断赋值
- 下一篇: Java 集合List、Set、Hash