強(qiáng)調(diào):一定用自己的話總結(jié),避免抄文檔,否則視為作業(yè)未完成。
this關(guān)鍵字的作用
為了解決成員變量和局部變量所存在的二義性,適用于有參構(gòu)造時(shí)使用
示例
private String name;
private int age;
public person(){}
public person(String name,int age){
this.name =name;//不使用this關(guān)鍵字的話,他的值就是默認(rèn)值
this.age =age;
}
為成員變量設(shè)置值, 構(gòu)造器和setter方法的選擇,為什么?
構(gòu)造器:在知道具體的參數(shù)的時(shí)候可以使用,可以創(chuàng)建對象并做初始化,只能使用一次
setter方法:在不知道有具體參數(shù)的時(shí)候使用,在創(chuàng)建對象后再使用getter方法進(jìn)行調(diào)用,可以多次使用
示例:
public class person {
private String name;
private int age;
public person(){}//無參構(gòu)造器,添加有參構(gòu)造器時(shí)必須寫
public person(String name,int age){//有參構(gòu)造器
this.name =name;
this.age =age;
}
//getter和setter方法
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 void p(){
System.out.println("名字:"+name+",年齡:"+age);
}
為什么需要繼承?
解決多個(gè)類中存在有相同的字段和方法的重復(fù)問題
Java中的繼承語法
繼承時(shí)候使用extends關(guān)鍵字
public class 父類名{
//父類,可以編寫多個(gè)不同類中相同的字段名
// 存放多個(gè)子類共同的字段和方法
}
public class 子類名 extends 父類名{
// 存放自己特有的(獨(dú)有的)字段和方法
}
子類能從父類中繼承到哪些成員?
1.public修飾的成員都可以被子類繼承
2.private 修飾的成員子類不能繼承
3.protected修飾的成員所有的子類都可以繼承,專門提供給子類使用
4.默認(rèn)的關(guān)鍵字只能是在同包下面可以被子類繼承
5.有參構(gòu)造器和無參構(gòu)造器不能被繼承
注意:java只支持單繼承,也支持多重繼承,不支持多繼承
繼承有一個(gè)根類:Objiect
子類什么時(shí)候需要覆蓋父類中的方法,方法重寫?(override)
在子類中添加一個(gè) 和父類一模一樣的方法
//執(zhí)行順序:
//1. 先找自己是否有對應(yīng)的方法,沒有就找父類的
//2.找父類中是否存在該方法,如果有就執(zhí)行,否則繼續(xù)找
//3.知道找到objiect類,如果也沒有就報(bào)錯(cuò)
方法覆蓋的規(guī)則
private修飾的方法不能被子類所繼承
- 實(shí)例方法簽名必須相同 (方法簽名= 方法名 + 方法的參數(shù)列表)
- 子類方法的返回值類型是和父類方法的返回類型相同或者是其子類
- 子類方法的訪問權(quán)限比父類方法訪問權(quán)限更大或相等
- 如果父類方法是private,子類方法不能重寫。==> 重寫建立在繼承的基礎(chǔ)上,沒有繼承,就不能重寫。
super關(guān)鍵字的作用
在子類中的父類方法被覆蓋了,但任然需要父類中方法的東西就需要使用super關(guān)鍵字
示例
public class Ostrich extends Bird {
public void fly() {
System.out.println("自由奔跑");
}
//在子類中,如何調(diào)用父類中的方法
public void doWork(){
fly();//調(diào)用自己的fly方法
//直接調(diào)用父類中的方法
//super指向父類對象,只能找到直接父類
super.fly();
}
什么時(shí)候需要把父類中的方法定義成抽象方法?
子類必須要覆蓋父類中的某一個(gè)方法的時(shí)候
使用abstract修飾的方法,稱為抽象方法。 0
public abstract 返回類型 方法名(參數(shù));
抽象方法的特點(diǎn):
-
使用abstract修飾,沒有方法體,留給子類去覆蓋
-
抽象方法必須定義在抽象類或接口中
使用abstract修飾的類,成為抽象類。/
public abstract class 類名{
}
抽象類應(yīng)該怎么使用?可以直接使用抽象類創(chuàng)建對象嗎?
1.抽象類不可以創(chuàng)建對象,語法不支持
2.抽象類中可以同時(shí)擁有抽象方法和普通方法
3.抽象類必須要有子類,并且子類必須覆蓋父類的抽象方法,否則該抽象類沒有意義,或者子類也是抽象類(可以不覆蓋)
抽象類的意義是什么?
必須要有子類來進(jìn)行繼承,子類必須覆蓋父類的抽象方法,除非子類也是一個(gè)抽象類就不用覆蓋
Objiect中的equals和toString關(guān)鍵字
1.equals:
示例:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//重寫父類中的equals
@Override
public boolean equals(Object o) {
if (this == o) return true;//地址相同就是同一個(gè)對象
//o為null或者兩個(gè)對象的類型不同,則不是同一個(gè)對象
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
//若果年齡相同并且姓名的值相同則表示同一個(gè)對象
return age == student.age && Objects.equals(name, student.name);
}
//省略setter方法
public static void main(String[] args) {
Student s1=new Student("國輝",23);
Student s2=new Student("國輝",23);
//==,基本數(shù)據(jù)類型比較值,引用類型比較值
System.out.println(s1 == s2);//false
//objiect類中的eqauls方法比較兩個(gè)對象的地址,作用和"=="相同
//在Student類中重寫equals方法之后,此時(shí)比較兩個(gè)對象的值是否相同
System.out.println(s1.equals(s2));//true
}
2.toString
示例:文章來源:http://www.zghlxwxcb.cn/news/detail-457511.html
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//重寫toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//省略setter方法
public static void main(String[] args) {
Student s1=new Student("國輝",23);
//cn.wolfcode._07_objiect.Student:全限定名
//@157f12c:地址
//objiect類中的toString:
//重寫objiect的toString方法,打印對象的字段值
System.out.println(s1.toString());//不具有打印功能,只做字符串轉(zhuǎn)換
System.out.println(s1);
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-457511.html
到了這里,關(guān)于02 面向?qū)ο? 繼承,抽象類)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!