繼承
1、從已有的類創(chuàng)建新類的過(guò)程就是繼承(實(shí)現(xiàn)了代碼的復(fù)用)
(1)
- 提供繼承信息的稱之為父類
- 提供繼承信息的稱之為子類
- 子類和父類是一種 is-a 的關(guān)系
(2)繼承的特點(diǎn)
- Java是單繼承的【一個(gè)類只有一個(gè)父類】
- 多層繼承【一個(gè)爸爸可以有多個(gè)兒子,兒子也可以再生兒子】
(3)什么時(shí)候用繼承
- 當(dāng)事物之間存在所屬關(guān)系時(shí)。
繼承中成員變量的特點(diǎn)
- 1、當(dāng)父類與子類成員變量同名時(shí)用“super.”來(lái)表示父類中的成員變量
- 2、this.是一個(gè)引用,總是指向當(dāng)前的使用對(duì)象
- 3、super.不是引用,當(dāng)子父類出現(xiàn)同名成員現(xiàn)象時(shí),用于區(qū)分子父類成員
繼承中、成員函數(shù)的特點(diǎn)
- 重寫:子類在繼承父類時(shí),含有和父類中一樣的函數(shù),當(dāng)創(chuàng)建子類對(duì)象時(shí),執(zhí)行的時(shí)重寫之后的方法。
- 作用:沿襲了父類的功能
繼承中構(gòu)造函數(shù)的特點(diǎn)
- 1、在創(chuàng)建子類的對(duì)象時(shí),先調(diào)用父類的構(gòu)造方法,再調(diào)用子類的構(gòu)造方法。
抽象類
- 含有抽象方法是類,沒(méi)有實(shí)現(xiàn)方法,用abstract修飾。
- 抽象類的特點(diǎn):抽象類無(wú)法創(chuàng)建對(duì)象,因?yàn)楹谐橄蟮姆椒?。繼承了抽象類的子類,沒(méi)有重寫父類中的抽象方法,該子類還是抽象類。抽象類是專門留給其他類去繼承的類。
實(shí)例
- 公司里的各個(gè)員工的工資狀況
1、寫一個(gè)員工的父類
package cn.edu.swpu;
/**
- 發(fā)工資
- @author Administrator
*/
public abstract class Employee1 {
protected String name;
/**
* 構(gòu)造器
*
* @param name
* 員工姓名
*/
public Employee1(String name) {
this.name = name;
}
/**
* 讀取名字
*
* @return返回名字
*/
public String getName() {
return name;
}
/**
* 計(jì)算月薪
* @return 返回月薪
*/
public abstract double getSalary();
}
2、分別寫經(jīng)理、程序員、銷售員的子類
package cn.edu.swpu;
/**
部門經(jīng)理
@param name
/
public class Manager1 extends Employee1 {
/*構(gòu)造器
-
@param name
*/
public Manager1(String name) {
super(name);
// TODO Auto-generated constructor stub
}@Override
public double getSalary() {
// TODO Auto-generated method stub
return 12000;
}
}
package cn.edu.swpu;
/**
- 程序員
- @author Administrator
*/
public class Programmer1 extends Employee1 {
private int workingHour;
/**
* 構(gòu)造器
*
* @param name 名字
*
*/
public Programmer1(String name) {
super(name);
}
/**
* 設(shè)置本月工作時(shí)間
*
* @param workingHour 工作時(shí)間(以小時(shí)為單位)
*
*/
public void setWorkingHour(int workingHour) {
this.workingHour = workingHour;
}
@Override
public double getSalary() {
// TODO Auto-generated method stub
return 150 * workingHour;
}
}
package cn.edu.swpu;
/**
- 銷售人員
- @author Administrator
/
public class Salesman1 extends Employee1 {
private double sales;
/*
構(gòu)造器
@param name 銷售人員的名字
/
public Salesman1(String name) {
super(name);
// TODO Auto-generated constructor stub
}
/*寫銷售額
-
@param sales 銷售額
*/
public void setSales(double sales) {
this.sales = sales;
}@Override
public double getSalary() {return 1500 + sales * 0.05;} //多態(tài)的方法,
}