Java繼承的概念與實現
阿新 • • 發佈:2019-02-12
繼承是類與類之間的關係,是一個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。
繼承可以理解為一個類從另一個類獲取方法和屬性的過程。如果類B繼承於類A,那麼B就擁有A的屬性和方法。
繼承使用extends關鍵字。
例如我們已經定義了一個類People:
package jicheng;
class People
{
String name;
int age;
int height;
void say()
{
System.out.println("我的名字是 " + name + ",年齡是 " + age + ",身高是 " + height);
}
}
如果現在需要定義一個類Teacher,它也有name,age,height屬性和say()方法,另外還需要增加school,seniority,subject屬性和lectureing()方法,怎麼辦呢?我們要重新定義一個類嗎?
完全沒有必要,可以先繼承People類的成員,在增加自己的成員即可,例如:
package jicheng;
class Teacher extends People
{
String school;//所在學校
String subject;//學科
int seniority;//教齡
//覆蓋People類中的say()方法
void say()
{
System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教齡");
}
void lecturing()
{
System.out.println("我已經" + age + "歲了,依然站在講臺上講課");
}
}
對程式的說明
• name 和 age 變數雖然沒有在 Teacher 中定義,但是已在 People 中定義,可以直接拿來用。
• Teacher 是 People 的子類,People 是Teacher 類的父類。
• 子類可以覆蓋父類的方法。
• 子類可以繼承父類除private以為的所有的成員。
• 構造方法不能被繼承。
繼承是在維護和可靠性方面的一個偉大進步。如果在People類中進行修改,那麼Teacher類就會自動修改,而不需要程式設計師做任何工作,除了對它進行編譯。
**單繼承性:**Java允許一個類僅能繼承一個其它類,即一個類只能有一個父類,這個限制被稱為單繼承性。介面允許多繼承。
最後對上面的程式碼進行整理:
package jicheng;
public class Demo
{
public static void main(String[] args)
{
Teacher t = new Teacher();
t.name = "小布";
t.age = 70;
t.school = "清華大學";
t.subject = "Java";
t.seniority = 12;
t.say();
t.lecturing();
}
}
class People
{
String name;
int age;
int height;
void say()
{
System.out.println("我的名字是 " + name + ",年齡是 " + age + ",身高是 " + height);
}
}
class Teacher extends People
{
String school;//所在學校
String subject;//學科
int seniority;//教齡
//覆蓋People類中的say()方法
void say()
{
System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教齡");
}
void lecturing()
{
System.out.println("我已經" + age + "歲了,依然站在講臺上講課");
}
}
執行結果:
我叫小布,在清華大學教Java,有12年教齡
我已經70歲了,依然站在講臺上講課
為了加強理解,再看一個例子:
package day33;
/*
* 父類 超類 基類
* 子類 派生類
* extends只能繼承一個類,java不支援多重繼承
* 子類繼承父類之後,子類可以呼叫父類的屬性和方法
* 也可以重寫父類的屬性和方法,還可以增加自己的屬性和方法
*/
//父類(動物類)
public class Animal
{
private String type;//類別
private String skin;//膚色
private int legCount;//幾條腿
public void eat()
{
System.out.println("動物在吃東西");
}
public void huxi()
{
System.out.println("動物在呼吸");
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSkin() {
return skin;
}
public void setSkin(String skin) {
this.skin = skin;
}
public int getLegCount() {
return legCount;
}
public void setLegCount(int legCount) {
this.legCount = legCount;
}
}
package day33;
public class Sheep extends Animal
{
public void eat()
{
System.out.println("山羊在吃草");
}
public void fire()
{
System.out.println("山羊在打架");
}
}
package day33;
//子類 老虎類
public class Tiger extends Animal
{
public void eat()
{
System.out.println("老虎在吃東西");
}
public void run()
{
System.out.println("老虎在跑");
}
}
package day33;
public class Test
{
public static void main(String[] args)
{
Tiger t = new Tiger();
t.eat();
t.setType("老虎");
t.setSkin("金黃色");
t.setLegCount(4);
System.out.println(t.getType()+","+t.getSkin()+","+t.getLegCount());
t.run();
Sheep e = new Sheep();
e.eat();
e.fire();
}
}
執行結果:
老虎在吃東西
老虎,金黃色,4
老虎在跑
山羊在吃草
山羊在打架
注意:構造方法不能被繼承,掌握這一點很重要。 一個類能得到構造方法,只有兩個辦法:編寫構造方法,或者根本沒有構造方法,類有一個預設的構造方法。