這一節我們學習面向對象的第二個特征——繼承。
那么什么是繼承呢?繼承有作用是什么?
我們先通過一個例子來說明:
~~~
class Student//學生類
{
String name;//姓名
int age;//年齡
void printInfo()//打印信息
{
System.out.println("姓名:"+name+"\t年齡:"+age);
}
void study()//學生在學習
{
System.out.println(name+"正在學習。");
}
}
class Worker//工人類
{
String name;//姓名
int age;//年齡
void printInfo()//打印信息
{
System.out.println("姓名:"+name+"\t年齡:"+age);
}
void work()//工作在工作
{
System.out.println(name+"正在工作。");
}
}
class ExtendTest
{
public static void main(String[] args)
{
Student student = new Student();
student.name = "小強";
student.age = 15;
student.printInfo();
student.study();
Worker worker = new Worker();
worker.name = "光頭強";
worker.age = 28;
worker.printInfo();
worker.work();
}
}
~~~
我們看結果:

這里我們定義了兩個類,一個是學生類,一個是工人類,但是我們會發現,上面的代碼重復的內容太多了,與我們要實現的代碼復用相悖,那么我們可以看到,對于學生和工作,它們有的共同之處就是它們都是一個人,有人的所有特征,那么我們在這里就可以重新定義一個Person類,如下:
~~~
class Person
{
String name;
int age;
void printInfo()
{
System.out.println("姓名:"+name+"\t年齡:"+age);
}
}
~~~
在Person類中,我們封裝了人的共性特征,姓名和年齡,以及一個打印信息的方法。
那么我們該怎么做呢?當然就是要建立Student類和Worker類與Person類之間的關系了,這就是我們這一節要說的繼承,讓Student類和Worker類都繼承于Person類,就可以直接繼承這些共有成員了。
我們可以extends關鍵字來實現繼承:
~~~
class Student extends Person//學生類
{
void study()//學生在學習
{
System.out.println(name+"正在學習。");
}
}
class Worker extends Person//工人類
{
void work()//工作在工作
{
System.out.println(name+"正在工作。");
}
}
~~~
結果:

這時我們會發現,運行結果正常,也是我們所要看到的,但是比較之前的代碼,我們真正意義上提高了代碼的復用性。
由此我們也可以總結出繼承的優點:
1.提高了代碼的復用性。
2.讓類與類之間產生的關系,為面向對象的第三個特征“多態”提供了前提。
- 前言
- 1.1 基本常識
- 1.2 Java語言概述
- 1.3 Java語言的環境搭建
- 1.4 Java程序開發之初體驗--Hello World
- 2.1 關鍵字
- 2.2 標識符
- 2.3 注釋
- 2.4 常量
- 2.5 進制掃盲
- 2.6 變量和數據類型(1)
- 2.7 變量和數據類型(2)
- 2.8 運算符
- 3.1 if語句
- 3.2 switch語句
- 3.3 while和do-while語句
- 3.4 for語句
- 3.5 for循環的嵌套
- 3.6 break語句與continue語句
- 4.1 函數的定義
- 4.2 定義函數的兩個明確
- 4.3 函數的內存加載過程
- 4.4 函數的重載
- 5.1 數組的定義
- 5.2 數組的內存分配及特點
- 5.3 數組操作中常見問題
- 5.4 數組常用操作(1)
- 5.5 數組常用操作(2)
- 5.6 二維數組
- 6.1 面向對象的概述
- 6.2 類與對象的關系
- 6.3 對象的內存體現
- 6.4 成員變量與局部變量
- 6.5 類類型參數與匿名對象
- 6.6 基本數據類型參數與引用數據類型參數的傳遞過程
- 6.7 封裝
- 7.1 構造函數概述與默認構造函數
- 7.2 構造函數與一般函數的區別
- 7.3 構造函數的重載
- 7.4 構造函數的內存加載
- 7.5 構造函數需要注意的幾個細節
- 7.6 this關鍵字的原理
- 7.7 this關鍵字的細節與應用
- 8.1 static關鍵字之特點
- 8.2 成員變量與靜態變量的區別
- 8.3 static關鍵字使用的注意細節
- 8.4 main函數的解析與細節
- 8.5 static關鍵字的使用場景
- 8.6 靜態的內存加載
- 8.7 靜態代碼塊
- 8.8 構造代碼塊
- 9.1 繼承
- 9.2 單繼承與多重繼承
- 9.3 子父類中成員變量特征體現