一裆悄、面向?qū)ο缶幊蹋╫op)的概念
面向?qū)ο缶幊蹋∣bject Oriented Programming, OOP是一種編程范式,它將計(jì)算機(jī)程序視為對(duì)象的集合,每個(gè)對(duì)象都可以接收消息、進(jìn)行數(shù)據(jù)處理和與其他對(duì)象交互拔恰。面向?qū)ο缶幊痰暮诵母拍钍穷惡蛯?duì)象,類定義了對(duì)象的屬性和行為焊夸,對(duì)象是類的實(shí)例仁连。面向?qū)ο缶幊谭椒ūM可能模擬人類的思維方式,使得軟件的開發(fā)方法與過程盡可能接近人類認(rèn)識(shí)世界阱穗、解決現(xiàn)實(shí)問題的方法和過程饭冬。面向?qū)ο缶幊痰膬?yōu)點(diǎn)包括重用性、靈活性和擴(kuò)展性揪阶。它能夠提供模塊化昌抠、可重用和易于維護(hù)的代碼結(jié)構(gòu)。
二鲁僚、面向?qū)ο缶幊蹋╫op)的特性
1.繼承
子類自動(dòng)繼承父類的屬性和方法炊苫,并可以添加新的屬性和方法。
父類 Animal(屬性和方法):
package cn.lnfvc.ken;
public class Animal {
private Stringname;
private int age;// 將age聲明為int類型
// 無參構(gòu)造函數(shù)
public Animal() {
}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {// 返回類型改為int
return age;
}
public void setAge(int age) {
this.age = age;
}
public Animal(String name,int age) {// 將age參數(shù)類型改為int
this.name = name;
this.age = age;
}
@Override
public StringtoString() {
return "Animal{" +
"name='" +name +'\'' +
", age=" +age +// 去掉了引號(hào)
'}';// 修正了拼寫錯(cuò)誤
}
}
子類 Mao1(屬性和方法):
class Mao1 extends Animal {
private boolean isEyes;
public Mao1() {
super();
}
public Mao1(String name,int age,boolean isEyes) {
super(name, age);
this.isEyes = isEyes;
}
public void setEyes(boolean isEyes) {
this.isEyes = isEyes;
}
public boolean isEyes() {
return isEyes;
}
@Override
public StringtoString() {
return "Mao{" +
"name='" + getName() +'\'' +
", age=" + getAge() +
", isEyes=" +isEyes +
'}';
}
}
Mao1 類繼承自 Animal 類冰沙,這意味著所有 Mao1 對(duì)象都是 Animal 對(duì)象侨艾,但不是所有 Animal 對(duì)象都是 Mao1 對(duì)象。
2.多態(tài)
同一操作作用于不同的對(duì)象可以有不同的解釋和執(zhí)行結(jié)果拓挥。
class CatTest {
public static void main(String[] args) {
Mao1 bigMao =new Mao1();
bigMao.setName("大毛");
bigMao.setAge(20);// 直接設(shè)置年齡為int類型
bigMao.setEyes(true);
Mao1 mao =new Mao1();
Animal cat =new Animal();// 創(chuàng)建一個(gè)Animal對(duì)象
System.out.println(bigMao.toString());// 打印bigMao對(duì)象的字符串表示
System.out.println(mao.toString());// 打印mao對(duì)象的字符串表示
System.out.println(cat.toString());// 打印cat對(duì)象的字符串表示
}
}
bigMao 和 mao 是 Mao1 類型的引用唠梨,指向 Mao1 對(duì)象,調(diào)用 toString 方法時(shí)執(zhí)行的是 Mao1 類中重寫的版本侥啤。cat 是 Animal 類型的引用当叭,指向 Animal 對(duì)象,調(diào)用 toString 方法時(shí)執(zhí)行的是 Animal 類中定義的版本盖灸。
輸出結(jié)果:
3.封裝
將客觀事物封裝成抽象的類蚁鳖,并隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼模塊化赁炎。
public class Book {
// 書名
private Stringname;
// 價(jià)格
private double price;
// 作者
private Stringauthor;
// 類目
private Stringtype;
// 右鍵生成 構(gòu)造函數(shù)
/**
*
* @param name
* @param price
* @param author
* @param type
*/
私有成員變量:所有成員變量(name, price, author, type)都被聲明為 private醉箕,這意味著它們不能被外部類直接訪問。
public Book(String name,double price, String author, String type) {
this.name = name;
this.price = price;
this.author = author;
this.type = type;
}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public StringgetAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public StringgetType() {
return type;
}
public void setType(String type) {
this.type = type;
}
公共方法:提供了公共的 getter 和 setter 方法來訪問和修改私有成員變量徙垫。這些方法允許受控的訪問和修改對(duì)象的狀態(tài)琅攘。
@Override
public StringtoString() {
return "Book{" +
"name='" +name +'\'' +
", price=" +price +
", author='" +author +'\'' +
", type='" +type +'\'' +
'}';
}
@Override public String toString():重寫了 Object 類的 toString 方法,用于提供 Book 對(duì)象的字符串表示松邪。這個(gè)方法返回一個(gè)格式化的字符串坞琴,包含所有書的屬性。
package cn.lnfvc.ken;
public class Text5 {
public static void main(String[] args) {
Book book =new Book("java基礎(chǔ)筆記",99.6,"林信良","編程類");
System.out.println(book.toString());
}
}
構(gòu)造函數(shù):提供了一個(gè)公共的構(gòu)造函數(shù)來初始化對(duì)象的狀態(tài)