個(gè)人主頁(yè):【??個(gè)人主頁(yè)】
系列專欄:【??初識(shí)JAVA】
前言
在之前的文章中,我們介紹過面向?qū)ο蟮木幊陶Z(yǔ)言,今天我們就來(lái)就進(jìn)入到JAVA面對(duì)對(duì)象的編程世界,今天我們主要來(lái)介紹面向?qū)ο蟮木幊谭妒街幸粋€(gè)重要的概念——繼承。
繼承
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類。
繼承就是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
類的繼承方式
在JAVA中我們可以通過 extends 關(guān)鍵字可以申明一個(gè)類是從另外一個(gè)類繼承而來(lái)的:
class 父類 {
}
class 子類 extends 父類 {
}
繼承的各種類型
多繼承
Java不支持多重繼承,即一個(gè)子類不能繼承多個(gè)父類。這是因?yàn)槎嘀乩^承可能會(huì)導(dǎo)致一些問題,比如:
- 命名沖突:如果兩個(gè)父類中有相同的
方法
或屬性
,則子類不知道該繼承哪一個(gè)。- 菱形繼承問題:如果一個(gè)類同時(shí)繼承自兩個(gè)父類,這兩個(gè)父類又都繼承自同一個(gè)父類,則子類中會(huì)存在兩個(gè)相同的父類,容易造成混亂。
為了解決這些問題,Java引入了接口(interface)的概念,使得一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口。雖然接口中也可以定義方法和屬性,但是接口中的方法都是抽象方法,沒有方法體,而且接口中的屬性都是常量。這樣可以避免命名沖突和菱形繼承問題。通過實(shí)現(xiàn)不同的接口,一個(gè)類可以具有多個(gè)不同的功能。
繼承的特性
- 子類擁有父類
非 private 的屬性、方法
。- 子類可以擁有自己的屬性和方法,即
子類可以對(duì)父類進(jìn)行擴(kuò)展
。- 子類可以用
自己的方式實(shí)現(xiàn)父類的方法
。- Java 的繼承是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是,例如 B 類繼承 A 類,C 類繼承 B 類,所以按照關(guān)系就是 B 類是 C 類的父類,A 類是 B 類的父類,這是 Java 繼承區(qū)別于 C++ 繼承的一個(gè)特性。提高了類之間的耦合性(繼承的缺點(diǎn),耦合度高就會(huì)造成代碼之間的聯(lián)系越緊密,代碼獨(dú)立性越差)。
各種繼承關(guān)鍵字
extends關(guān)鍵字
在 Java 中,extends 關(guān)鍵字用于表示一個(gè)類繼承自另一個(gè)類。子類(派生類)繼承父類(基類、超類)的所有方法和屬性,并且還可以添加自己的方法和屬性。被繼承的類稱為超類或基類,繼承自該類的類稱為子類或派生類。
class Animal {
void move() {
System.out.println("動(dòng)物可以移動(dòng)");
}
}
class Dog extends Animal {
void move() {
System.out.println("狗可以跑和走");
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal 對(duì)象
Animal b = new Dog(); // Dog 對(duì)象
a.move(); // 執(zhí)行 Animal 類的方法
b.move(); // 執(zhí)行 Dog 類的方法
}
}
Animal 類是一個(gè)超類,Dog 類是一個(gè)子類。Dog 繼承了 Animal 類,并重寫了 Animal 類的 move() 方法。在 main() 方法中,創(chuàng)建了 Animal 和 Dog 類的對(duì)象,并調(diào)用了它們的 move() 方法。由于 Animal 對(duì)象調(diào)用的是 Animal 類的 move() 方法,而 Dog 對(duì)象調(diào)用的是 Dog 類重寫的 move() 方法。
implements關(guān)鍵字
implements是Java中的一個(gè)關(guān)鍵字,用于實(shí)現(xiàn)接口。當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)接口時(shí),必須使用implements關(guān)鍵字,并且實(shí)現(xiàn)該接口中定義的所有方法。
public interface MyInterface {
public void method1();
public void method2();
}
public class MyClass implements MyInterface {
public void method1() {
System.out.println("Implementation of method1");
}
public void method2() {
System.out.println("Implementation of method2");
}
}
MyClass實(shí)現(xiàn)了MyInterface接口并實(shí)現(xiàn)了其中的method1和method2方法。這使得MyClass能夠使用接口中定義的方法,并且可以通過多態(tài)性來(lái)引用MyInterface的實(shí)例。
super 與 this 關(guān)鍵字
Java 中的 super 和 this 都是關(guān)鍵字,分別用于訪問父類和本類中的成員。
super 關(guān)鍵字
super 可以用來(lái)訪問父類中被子類覆蓋的方法和屬性
super.父類方法名(參數(shù)列表);//或者
super.父類屬性名;
//例如:
public class Father {
public String name;
public Father(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(name + " is eating " + food);
}
}
public class Son extends Father {
public int age;
public Son(String name, int age) {
super(name);
this.age = age;
}
@Override
public void eat(String food) {
super.eat(food); // 調(diào)用父類的 eat 方法
System.out.println(name + " is " + age + " years old");
}
}
public class Test {
public static void main(String[] args) {
Son son = new Son("Tom", 18);
son.eat("apple");
}
}
其中,父類方法和屬性必須是被子類繼承和覆蓋的。在子類中,如果要訪問父類中的成員,就可以使用 super 關(guān)鍵字。
this 關(guān)鍵字
this 關(guān)鍵字可以用來(lái)引用當(dāng)前對(duì)象的屬性或方法
this 關(guān)鍵字可以用來(lái)引用當(dāng)前對(duì)象的屬性或方法//或者
this 關(guān)鍵字可以用來(lái)引用當(dāng)前對(duì)象的屬性或方法
//例如:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void getInfo() {
System.out.println("Name: " + this.name);
System.out.println("Age: " + this.age);
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("Tom", 18);
s.getInfo();
}
}
final 關(guān)鍵字
Java 中的 final 關(guān)鍵字用于表示不可變的值或不可變的引用
對(duì)于變量,final 修飾的變量表示為常量,一旦被賦值后不能被修改。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-699229.html
- 對(duì)于方法,final 修飾的方法表示方法不能被子類重寫。
- 對(duì)于類,final 修飾的類表示類不能被繼承。
使用 final 可以使程序更加安全可靠,因?yàn)槌A恐挡蛔?,可以防止意外修改值?dǎo)致程序出錯(cuò);final 方法和類可以保證方法和類的行為不會(huì)被改變,有助于程序設(shè)計(jì)和優(yōu)化。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-699229.html
到了這里,關(guān)于【JAVA】面向?qū)ο蟮木幊陶Z(yǔ)言(繼承篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!