面向?qū)ο笕筇匦裕悍庋b,繼承,多態(tài)。
封裝:
將對(duì)象具有的一些屬性和方法打包到一起,隱藏屬性和方法的具體實(shí)現(xiàn)。即封裝。隱藏類的實(shí)現(xiàn)細(xì)節(jié),讓使用者只能通過指定的方法訪問數(shù)據(jù),限制不合理操作。便于修改,增強(qiáng)代碼的可維護(hù)性。
如何實(shí)現(xiàn)封裝:
將成員變量聲明為私有的,再提供一個(gè)或多個(gè)公有(public)set或get方法實(shí)現(xiàn)對(duì)該成員變量的訪問和修改。
繼承:
將一個(gè)已有類中的屬性和方法保留,再加上自己特有的屬性和方法形成一個(gè)新的類。即繼承。通過extends實(shí)現(xiàn)。
要調(diào)用父類的構(gòu)造方法,可用super關(guān)鍵字實(shí)現(xiàn),若要調(diào)用父類特定的構(gòu)造方法,則用super里面的參數(shù)確定,super()寫在子類的構(gòu)造函數(shù)中。,如super(name, age, sex, salary); 表示調(diào)用父類的public Person(String name, int age, String sex, Double salary)構(gòu)造方法。特別注意,如果父類中有構(gòu)造方法,則子類必須實(shí)現(xiàn)其構(gòu)造方法,若父類沒有構(gòu)造方法,子類可以定義構(gòu)造方法也可不定義。
代碼演示:
//父類
public class Person {
private String name;
private int age;
private String sex;
private Double salary;
public Person(String name, int age, String sex, Double salary) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
}
public String getName(){
return name;
}
public String setName(String name){
return this.name=name;
}
public int getAge(){
return age;
}
public int setAge(int age){
return this.age=age;
}
public String getSex(){
return sex;
}
public String setSex(String sex){
return this.sex=sex;
}
public Double getSalary(){
return salary;
}
public Double setSalary(Double salary){
return this.salary=salary;
}
}
//子類
public class Student extends Person {
private String school;
public Student(String name, int age, String sex, Double salary) {
super(name, age, sex, salary);
}
public String getSchool(){
return school;
}
public void setSchool(String school){
this.school=school;
}
public static void main(String[] args) {
Student p1=new Student("張三",20,"男",10000.98);
Student p2=new Student("李四",18,"女",8001.98);
System.out.println(p1.getName()+"的年齡是"+p1.getAge()+","+"性別是"+p1.getSex()+","+"工資是"+p1.getSalary());
System.out.println();
System.out.println(p2.getName()+"的年齡是"+p2.getAge()+","+"性別是"+p2.getSex()+","+"工資是"+p2.getSalary());
p1.setName("王好");
p1.setAge(90);
p1.setSex("女");
p1.setSalary(4025.90);
System.out.println();
System.out.println("姓名:"+p1.getName()+" 年齡:"+p1.getAge()+" 性別:"+p1.getSex()+" 工資:"+p1.getSalary());
}
}
繼承小結(jié):
- 如果一個(gè)類中沒有顯示extends任何類,則默認(rèn)繼承Object類。
- Java只支持單繼承,不支持多繼承。若要實(shí)現(xiàn)多繼承,可以由類B繼承類A,類C繼承類B。
- 子類只繼承父類的成員變量和成員方法,不繼承父類的構(gòu)造方法,若要繼承父類的構(gòu)造方法,可在子類的構(gòu)造方法中使用super構(gòu)造方法。
- 繼承的成員只能為非private的變量和方法,如果父類的方法為private,子類中同名,同參,同返回值類型方法相當(dāng)于定義了一個(gè)新方法,與父類沒有任何關(guān)系。
多態(tài):
同名但有不同的具體實(shí)現(xiàn)的多個(gè)方法同時(shí)存在于一個(gè)類中。多態(tài)的體現(xiàn)方式:方法重載和方法重寫。
方法重寫:發(fā)生在父類與子類中。子類與父類中方法名,參數(shù)類型及個(gè)數(shù),返回值都相同,只有方法體不同,叫做方法重寫。方法重寫需注意一下幾點(diǎn):
- 如果在子類中想調(diào)用父類中那個(gè)被重寫的方法,可以使用super.方法名(參數(shù)列表)。
- 重寫方法時(shí),被重寫的方法訪問權(quán)限不能比父類低,訪問權(quán)限由高到低一次為:public,protected,default,private。
例如:
//父類
public void Run(){
System.out.println("歡迎來(lái)到簡(jiǎn)書!");
}
//子類
public void Run(){
System.out.println("你好,晚安");
}
方法重載:發(fā)生在同一個(gè)類中,同一個(gè)類中有多個(gè)方法名相同,返回值類型相同,但是參數(shù)類型和個(gè)數(shù)不同的方法就是方法重載。
例如:
//方法重載發(fā)生在同一個(gè)類中
public void Run( String n){
System.out.println("歡迎來(lái)到簡(jiǎn)書!"+n);
}
public void Run( int m){
System.out.println("你好,晚安"+m);
}