1.什么是繼承?
生活中:
? ? ? ? 繼承 ---> 延續(xù)
? ? ? ? ? ? ? ? ---> 擴(kuò)展
代碼中:
? ? ? ? 繼承 ---> 重復(fù)使用已有的類的代碼(復(fù)用)
? ? ? ? ? ? ? ? ---> 擴(kuò)展已有類的代碼(擴(kuò)展)
2.為什么要繼承?
① 代碼的復(fù)用和擴(kuò)展
② 滿足is - a 的關(guān)系
事物的分類來(lái)說(shuō),子類別的關(guān)系
Student is a Person.
Teacher is a Person
Car is not a Person
3.如何繼承
關(guān)鍵字:extends
語(yǔ)法格式:
【修飾符】 class? 子類名? extends? 父類名{
}
子類:SubClass,又稱為派生類
父類:SuperClass,又稱為基類,超類
子類表示的事物范圍大,還是父類表示事物的范圍大?
如:Person類(人)是父類
? ? ? ?Student類(學(xué)生)是子類
? ? ? ?子類? <? 父類
子類更具體,里面的成員描述更多
父類更抽象,籠統(tǒng)的描述信息更少
4.繼承有什么特點(diǎn)?
① 子類會(huì)繼承父類所有的實(shí)例變量和實(shí)例方法,如果理解這句話?
A:雖然子類繼承了父類的所有實(shí)例變量和實(shí)例方法。但是因?yàn)闄?quán)限修飾符的原因,某些成員在子類中不能直接使用,可以間接使用。private修飾的成員,在子類中是不能直接使用的。權(quán)限修飾符缺省的成員,在跨包的子類中是不能直接使用的。本包子類可以。
B:這里說(shuō)的繼承所有,是說(shuō),子類代表的這個(gè)事物,它具備父類中所描述的所有特征。
類的定義:一類具有相同特征的事物的抽象描述。
例如:Person類中有name,age屬性,eat()方法
這些特征無(wú)論它是否私有,對(duì)于子類Student類,它都應(yīng)該有這個(gè)特征。
C:既然是子類繼承了所有的實(shí)例變量,那么在子類對(duì)象創(chuàng)建時(shí),需要在子類對(duì)象的堆空間中開辟對(duì)應(yīng)的內(nèi)存來(lái)存它的值。
D:所謂的繼承,不是說(shuō),父類的代碼在子類中完全重復(fù)一遍,而是在使用子類時(shí),除了可以用自己本類聲明的成員,還可以去父類中尋找可以(看權(quán)限修飾符)用的成員。
② java中只支持單繼承,即一個(gè)子類只能有一個(gè)“直接”父類
比喻:一個(gè)人只有一個(gè)親生父親
③ java支持多層繼承
比喻:祖宗很多代,代代相傳
④ 一個(gè)java父類,可以同時(shí)有多個(gè)子類
Idea中,選中某個(gè)類,Ctrl + H,查看繼承關(guān)系
選中某個(gè)類,Ctrl + Alt +? U,以繼承樹的方式查看繼承關(guān)系
5.繼承后調(diào)用父類聲明的屬性和方法
在繼承的時(shí)候,子類會(huì)繼承父類所有的成員變量(實(shí)例變量)和成員方法(實(shí)例方法)
既然可以繼承,
① 在子類外面,子類的對(duì)象是否可以使用父類中聲明的成員變量和成員方法,只要權(quán)限修飾符允許,通過(guò)子類對(duì)象可以直接使用父類中聲明的成員變量和成員方法
② 在子類中,如果要用到父類聲明成員變量和成員方法,只要權(quán)限修飾符允許,可以直接使用,不需要通過(guò)“對(duì)象 . ” 的方式來(lái)引用父類中聲明的成員變量和成員方法。
練習(xí)代碼:
Person類:
① 聲明父類:Person類
- 包含屬性:姓名,年齡,性別,屬性私有化,
- 包含get/set方法
- 包含getInfo()方法:例如:姓名:張三,年齡:23,性別:男
public class Person {
private String name;
private int age;
private char gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getInfo(){
return "姓名:" + name +",年齡:" + age + ",性別:" + gender;
}
}
Student類代碼:
② 聲明子類:Student類,繼承Person類
- 新增屬性:score成績(jī),屬性私有化,
- 包含get/set方法
- 重寫getInfo()方法:例如:姓名:張三,年齡:23,性別:男,成績(jī):89
public class Student extends Person{
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String getInfo() {
return super.getInfo() + ",成績(jī):" + score;
}
}
Teacher類代碼:
③ 聲明子類:Teacher類,繼承Person類
- 新增屬性:salary薪資,屬性私有化,
- 包含get/set方法
- 重寫getInfo()方法:例如:姓名:張三,年齡:23,性別:男,薪資:10000
public class Teacher extends Person {
private double salary;
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String getInfo() {
return super.getInfo() + ",薪資:" + salary;
}
}
TestPerson類代碼:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-452842.html
④ 在測(cè)試類的main方法中創(chuàng)建三個(gè)類的對(duì)象,并調(diào)用相應(yīng)的方法測(cè)試文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-452842.html
public class TestPerson {
public static void main(String[] args) {
Person p = new Person();
p.setName("張三");
p.setGender('男');
p.setAge(25);
System.out.println(p.getInfo());
Student s = new Student();
s.setName("張三豐");
s.setAge(5);
s.setGender('男');
s.setScore(89);
System.out.println(s.getInfo());
Teacher t = new Teacher();
t.setName("柴林燕");
t.setAge(18);
t.setGender('女');
t.setSalary(10000);
System.out.println(t.getInfo());
}
}
到了這里,關(guān)于面向?qū)ο蟮牡诙€(gè)基本特征:繼承011026的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!