java面向?qū)ο缶幊讨匾拍罾^承和多態(tài)示例解析
繼承
繼承和多態(tài)是面向?qū)ο缶幊痰膬蓚€(gè)重要概念,它們使得我們可以創(chuàng)建更加通用、可擴(kuò)展的代碼。
繼承是一種創(chuàng)建新類(lèi)的方式,新類(lèi)(子類(lèi))從現(xiàn)有類(lèi)(父類(lèi))繼承屬性和方法。子類(lèi)可以重寫(xiě)或擴(kuò)展父類(lèi)的功能。
要?jiǎng)?chuàng)建一個(gè)子類(lèi),可以使用 extends 關(guān)鍵字:
class SubClassName extends ParentClassName {
// 子類(lèi)的成員變量和方法
}示例1:繼承
// 父類(lèi)
class Animal {
String name;
int age;
void sleep() {
System.out.println(name + " is sleeping.");
}
}
// 子類(lèi)
class Dog extends Animal {
String breed;
void bark() {
System.out.println(name + " is barking.");
}
}
class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.name = "Buddy";
myDog.age = 3;
myDog.breed = "Golden Retriever";
myDog.bark(); // 子類(lèi)的方法
myDog.sleep(); // 繼承自父類(lèi)的方法
}
}方法重寫(xiě)(覆蓋)
子類(lèi)可以重寫(xiě)父類(lèi)的方法,以便在調(diào)用子類(lèi)對(duì)象的該方法時(shí)使用子類(lèi)的實(shí)現(xiàn)而不是父類(lèi)的實(shí)現(xiàn)。重寫(xiě)方法的返回類(lèi)型、方法名和參數(shù)列表必須與父類(lèi)相同。
class SubClassName extends ParentClassName {
@Override // 注解,表明該方法重寫(xiě)了父類(lèi)的方法,非必須但建議使用
ReturnType methodName(Parameters) {
// 子類(lèi)的實(shí)現(xiàn)
}
}示例2:方法重寫(xiě)
// 父類(lèi)
class Animal {
String name;
int age;
void sleep() {
System.out.println(name + " is sleeping.");
}
}
// 子類(lèi)
class Dog extends Animal {
String breed;
void bark() {
System.out.println(name + " is barking.");
}
@Override
void sleep() {
System.out.println(name + " the " + breed + " is sleeping.");
}
}
class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.name = "Buddy";
myDog.age = 3;
myDog.breed = "Golden Retriever";
myDog.bark();
myDog.sleep(); // 調(diào)用子類(lèi)重寫(xiě)的方法
}
}多態(tài)
多態(tài)是一個(gè)對(duì)象在不同情況下表現(xiàn)出不同的行為。多態(tài)是通過(guò)父類(lèi)引用指向子類(lèi)對(duì)象實(shí)現(xiàn)的。
ParentClassName objectName = new SubClassName();
示例3:多態(tài)
// 父類(lèi)
class Animal {
String name;
int age;
void sleep() {
System.out.println(name + " is sleeping.");
}
}
// 子類(lèi)
class Dog extends Animal {
String breed;
void bark() {
System.out.println(name + " is barking.");
}
@Override
void sleep() {
System.out.println(name + " the " + breed + " is sleeping.");
}
}
class Main {
public static void main(String[] args) {
// 多態(tài)
Animal myAnimal = new Dog();
myAnimal.name = "Buddy";
myAnimal.age = 3;
myAnimal.sleep(); // 調(diào)用子類(lèi)重寫(xiě)的方法
// 注意:無(wú)法訪問(wèn)子類(lèi)特有的方法和屬性
// myAnimal.bark(); // 錯(cuò)誤
// myAnimal.breed = "Golden Retriever"; // 錯(cuò)誤
}
}多態(tài)的主要優(yōu)點(diǎn)是代碼的可擴(kuò)展性和維護(hù)性。當(dāng)你需要添加新的子類(lèi)時(shí),不需要修改使用多態(tài)的代碼。
抽象類(lèi)和接口
抽象類(lèi)和接口是 Java 中實(shí)現(xiàn)多態(tài)和代碼復(fù)用的兩種方式。
抽象類(lèi):包括抽象方法(沒(méi)有實(shí)現(xiàn)的方法)和具體方法。子類(lèi)必須實(shí)現(xiàn)所有抽象方法。使用 abstract 關(guān)鍵字定義抽象類(lèi)和抽象方法。
abstract class AbstractClassName {
// 抽象方法
abstract ReturnType methodName(Parameters);
// 具體方法
ReturnType methodName(Parameters) {
// 方法實(shí)現(xiàn)
}
}
```接口:定義一組方法簽名(沒(méi)有實(shí)現(xiàn)的方法)。實(shí)現(xiàn)接口的類(lèi)必須實(shí)現(xiàn)所有方法。使用 interface 關(guān)鍵字定義接口。
interface InterfaceName {
// 方法簽名(沒(méi)有方法體)
ReturnType methodName(Parameters);
}
```示例4:抽象類(lèi)和接口
// 抽象類(lèi)
abstract class Animal {
String name;
int age;
abstract void makeSound();
void sleep() {
System.out.println(name + " is sleeping.");
}
}
// 接口
interface Pet {
void play();
}
// 子類(lèi)實(shí)現(xiàn)抽象類(lèi)和接口
class Dog extends Animal implements Pet {
String breed;
@Override
void makeSound() {
System.out.println(name + " is barking.");
}
@Override
public void play() {
System.out.println(name + " is playing.");
}
}
class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.name = "Buddy";
myDog.age = 3;
myDog.breed = "Golden Retriever";
myDog.makeSound(); // 實(shí)現(xiàn)抽象類(lèi)的抽象方法
myDog.sleep(); // 繼承自抽象類(lèi)的具體方法
myDog.play(); // 實(shí)現(xiàn)接口的方法
}
}這是關(guān)于繼承和多態(tài)的基本介紹。通過(guò)這些概念,你可以創(chuàng)建更加靈活和可擴(kuò)展的代碼。在實(shí)際開(kāi)發(fā)中,你會(huì)遇到更多復(fù)雜和實(shí)用的用例,通過(guò)多做練習(xí)和深入學(xué)習(xí),你將更好地掌握這些知識(shí)點(diǎn)。
以上就是java面向?qū)ο缶幊讨匾拍罾^承和多態(tài)示例解析的詳細(xì)內(nèi)容,更多關(guān)于java 繼承多態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot配置允許跨域訪問(wèn)代碼實(shí)例
這篇文章主要介紹了springboot配置允許跨域訪問(wèn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
HDFS的Java API的訪問(wèn)方式實(shí)例代碼
這篇文章主要介紹了HDFS的Java API的訪問(wèn)方式實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
java使用HttpSession實(shí)現(xiàn)QQ訪問(wèn)記錄
這篇文章主要介紹了java使用HttpSession實(shí)現(xiàn)QQ的訪問(wèn)記錄的相關(guān)資料,需要的朋友可以參考下2016-03-03
SpringBoot整合Flink CDC實(shí)現(xiàn)實(shí)時(shí)追蹤mysql數(shù)據(jù)變動(dòng)
我們將整合Spring Boot和Apache Flink CDC(Change Data Capture)來(lái)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)追蹤,下面是一個(gè)基本的實(shí)踐流程代碼,包括搭建Spring Boot項(xiàng)目、整合Flink CDC以及實(shí)現(xiàn)數(shù)據(jù)變動(dòng)的實(shí)時(shí)追蹤,需要的朋友可以參考下2024-07-07
Java中Socket設(shè)置連接超時(shí)的代碼分享
在我們?nèi)粘_B接中,如果超時(shí)時(shí)長(zhǎng)過(guò)長(zhǎng)的話(huà),在開(kāi)發(fā)時(shí)會(huì)影響測(cè)試,下面這篇文章主要給大家分享了關(guān)于Java中Socket設(shè)置連接超時(shí)的代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-06-06

