一、繼承的實(shí)現(xiàn)
- 繼承的基本概念: 擴(kuò)展父類的功能
- Java中使用extends關(guān)鍵字完成繼承:
class 子類 extends 父類 { }
代碼
class PersonB{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// public void tell() {
// System.out.println("姓名:"+getName()+" 年齡:"+getAge());
// }
}
class StudentB extends PersonB{
// private int age;
// private String name;
private int score;
// public int getAge() {
// return age;
// }
// public void setAge(int age) {
// this.age = age;
// }
// public String getName() {
// return name;
// }
// public void setName(String name) {
// this.name = name;
// }
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void say() {
// System.out.println("成績:"+getScore());
System.out.println("姓名:"+getName()+" 年齡:"+getAge()+" 成績:"+getScore());
}
}
public class Demo15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentB sB = new StudentB();
sB.setAge(20);
sB.setName("張小");
sB.setScore(100);
// sB.tell();
sB.say();
}
}
結(jié)果:
姓名:張小 年齡:20 成績:100
二、繼承的限制
- 在Java中只允許單繼承。
- 子類不能直接訪問父類的私有成員。
代碼
class PeopleB{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Worker extends PeopleB{
public void tell() {
System.out.println(getAge());
}
}
//class PetWorker extends Worker{
// public void tell() {
// System.out.println(age);
// }
//}
public class Demo16 {
public static void main(String[] args) {
Worker w = new Worker();
w.setAge(100);
w.tell();
}
}
結(jié)果:
100
三、子類對(duì)象實(shí)例化過程
在子類對(duì)象實(shí)例化之前,必須先調(diào)用父類中的構(gòu)造方法,之后調(diào)用子類構(gòu)造方法。

過程.jpg
代碼
class Father{
public Father(){
System.out.println("父類的構(gòu)造方法");
}
}
class Son extends Father{
public Son(){
System.out.println("子類的構(gòu)造方法");
}
}
public class Demo17 {
public static void main(String[] args) {
Son s = new Son();
}
}
結(jié)果:
父類的構(gòu)造方法
子類的構(gòu)造方法
四、方法重寫與super關(guān)鍵字
- 在繼承中,也存在著重寫的概念,其實(shí)就是子類定義了和父類同名的方法。
- 定義:方法名稱相同,返回值類型相同,參數(shù)也相同。
- 重寫限制:被子類重寫的方法不能擁有比父類方法更加嚴(yán)格的訪問權(quán)限。
- 訪問權(quán)限:
private < default < public- super關(guān)鍵字:強(qiáng)行調(diào)用父類的方法的執(zhí)行。
- super不一定在重寫中使用,也可以表示那些方法是從父類中繼承而來的。
代碼
class A{
public void tell() {//可以在整個(gè)工程下都可以訪問
System.out.println("我是tell方法");
}
private void say1(){ //私有的,只有在當(dāng)前類中訪問
}
void print(){ //default 可以在同一包下進(jìn)行訪問
}
}
class B extends A{
public void tell() {
super.tell();
System.out.println("我重寫了tell方法");
}
}
public class Demo18 {
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
b.tell();
}
}
結(jié)果:
我是tell方法
我重寫了tell方法
五、重寫與重載的區(qū)別
| 區(qū)別點(diǎn) | 重載 | 重寫 |
|---|---|---|
| 單詞 | Overloading | Overriding |
| 定義 | 方法名相同,參數(shù)的類型或個(gè)數(shù)不同 | 方法名、參數(shù)的類型、返回值類型全部相同 |
| 權(quán)限 | 對(duì)權(quán)限沒有要求 | 被重寫的方法不能擁有比父類更加嚴(yán)格的權(quán)限 |
| 范圍 | 發(fā)生在一個(gè)類中 | 發(fā)生在繼承中 |