面向对象编程基础
面向對象編程基礎
一、類與方法
1、面向對象編程
| 面向機器語言 | 讓使用者擺脫計算機的一些純事物性的細節問題,而專心考慮程序間的內在聯系。 | 低級 | 機器語言(1,0)、匯編語言 |
| 面向過程語言 | 不必再去考慮機器指令的細節,只要按著具體語言的語法要求去編寫 | Fortran語言、C語言 | |
| 面向對象語言 | 更加符合人的思維模式,鼓勵創造性的程序設計 | 高級 | C++、Python、Java |
面向對象編程的三大特點:封裝性,繼承性,多態性。
2、類的成員變量與方法
在面向對象編程中,一個源程序一般有若干個類。類聲明的變量被稱作對象,以下是聲明一個學生類的格式,包含著一個學生的各種基本屬性,如姓名、生日、年齡、成績。
public class student{String name;String birthday;int age;double score; }特別注意:Java中只能有一個公共類。
2.1 成員變量
即在在 Java 中對象的屬性,例如上方生命的類的四項數據。
| 默認值 | 0 | 0.0 | 空格 | false | null |
2.2 成員方法
例如,給上述學生類添加更改個人信息和輸出的方法:
public void input() {name="wang";birthday="2000/01/01";age=21;score=95; } private void output() {System.out.println(name+" "+birthday+" "+age+" "+score); }其中public, private是用來控制方法的訪問權限。而void關鍵字體現了方法沒有返回值。
而成員方法具有三種參數,列舉如下。
| 值參數 | 在方法中對形參的修改并不會影響實參。 | 計算箱子里圖書的總數 |
| 引用參數 | 對參數的修改會反映到原有的數組或者其他引用類型上。 | 將美元轉換為人民幣 |
| 不定長參數 | 表示方法:參數類型… 參數名 | 無 |
3、構造方法
通過修改上述輸入學生個人信息的方法實現相同功能。
public student() {name="wang";birthday="2000/01/01";age=21;score=95; }這一函數沒有返回值類型,且與類重名,被稱為構造函數。構造函數的修飾符為public。
4、this關鍵字
首先存在以下實例。
String name="wang"; private void output(String name) {System.out.println(name); } public static void main(String[] args) {com.test.student xs=new com.test.student();xs.output("li"); }運行結果:
lili li
如果想輸出成員變量的值,需要運用this。
this除了可以調用成員變量或方法外,還可以作為方法的返回值。例如:
private student output(String name) {System.out.println(this.name);return this; }5、靜態變量和靜態方法
當不想建立一個類的實例的時候,可以使用靜態變量。
public class cost {static double money=0;static void getMoney(){money+=1000;}static void spendMoney(){money-=750;}static void output(){System.out.println(money);}public static void main(String[] args){getMoney();output();} }運行結果:
1000.01000.0 1000.0
此外,用static修飾代碼區域可以稱之為靜態代碼塊,可用于完成類的初始化操作,在類聲明時運行。
6、類的主方法
通俗的來說,相當于C語言的主函數,是類運行的入口。
public static void main(String[] args) {getMoney();output(); }例如這是5中類的主方法。主方法必須調用靜態方法,并且沒有返回值。
二、繼承與多態
1、類的繼承
繼承的子類一般與父類有一些相同的屬性。例如我們可以建立人的類。
public class human {String name="wang";String birthday;int age;private human output(String name){System.out.println(this.name);return this;} }public class student extends human{double score;private student output(double score){System.out.println(this.score);System.out.println(this.name);return this;}public static void main(String[] args){com.test.student xs=new com.test.student();xs.output(95);} }運行結果:
0.0,wang0.0, wang 0.0,wang
2、繼承關鍵字
| implements | 可以實現多個接口,仿多繼承的特性。 |
| super | 引用當前對象的父類成員 |
| this | 指向當前類的引用 |
| final | 將類設置為不可繼承模式 |
implements繼承的實例:
public interface human { public void live(); } public interface learner { public void learn(); } public class student implements human,learner { }3、繼承的特性
| 2、子類可以對父類進行擴展,擁有自己的屬性和方法; |
| 3、子類是不繼承父類的構造器(構造方法或者構造函數)的,它只是調用(隱式或顯式)。如果父類的構造器帶有參數,則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器并配以適當的參數列表; |
| 4、 如果父類構造器沒有參數,則在子類的構造器中不需要使用 super 關鍵字調用父類構造器,系統會自動調用父類的無參構造器。 |
4、多態的轉型
| 向上轉型 | 使用父類完成子類操作 | 父類類型 變量名 = new 子類類型() |
| 向下轉型 | 使用子類特有功能 | 子類類型 變量名 =(子類類型) 父類類型的變量 |
三、實例
1、設計加油站類和汽車類,加油站提供一個給車加油的方法,參數為剩余汽油數量。每次執行加油方法,汽車的剩余汽油數量都會加 2。
public class addoil {public double add(){return 2;} }public class test extends addoil{double oil;public test(double left){oil=left;}public static void main(String[] args){test car=new test(5);System.out.println(""+(car.oil+car.add()));} }2、智能手機的默認語言為英文。,但制造手機時可以將默認語言設置為中文。編寫手機類, 無,參構造方法使用默認語言設計,利用有參構造方法修改手機的默認語言。
public class test {String language="English";public test(boolean x){if(x){language="Chinese";}}public static void main(String[] args){test phone=new test(true);System.out.println(""+phone.language);} }3、張三去KFC買可樂,商家默認不加冰塊。但是張三可以要求加 3 個冰塊。請利用有參構造方法實現上述功能。
public class test {int ices=0;public test(boolean x){if(x){ices+=3;}}public static void main(String[] args){test bk=new test(true);System.out.println(""+bk.ices);} }4、創建教師類,類中有姓名、性別和年齡三個屬性,在構造方法中使用 this 關鍵字分別為這三個成員屬性賦值。
public class test {String name;String xb;int age;public test(){this.name="wang";this.xb="nan";this.age=30;}public static void main(String[] args){test teacher=new test();} }5、一只大熊貓,長 1.3 米,重 90千克。在自定義方法中使用this關鍵字調用類的成員變量并在控制臺輸出這只大熊貓的信息。
public class test {double length=1.3;double weight=90;private void show(){System.out.println(this.length+" "+this.weight);}public static void main(String[] args){test panda=new test();panda.show();} }6、創建信用卡類,有兩個成員變量分別是卡號和密碼,如果用戶開戶時沒有設置初始密碼,則使用"123456"作為默認密碼。設計兩個不同的構造方法,分別用于用戶設置密碼和用戶未設置密碼兩種構造場景。
public class test {String num;String pw;public test(){pw="123456";}public test(String npw){pw=npw;}public static void main(String[] args){test card=new test();System.out.println(""+card.pw);} }參考資料:
1、https://github.com/datawhalechina/team-learning-program/blob/master/Java/5.%E7%B1%BB%E4%B8%8E%E6%96%B9%E6%B3%95.md
2、https://github.com/datawhalechina/team-learning-program/blob/master/Java/6.%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81.md
3、https://github.com/datawhalechina/team-learning-program/blob/master/Java/%E7%BB%83%E4%B9%A0%E9%A2%98%EF%BC%9A%E7%B1%BB%E4%B8%8E%E6%96%B9%E6%B3%95.md(實例出處1)
4、https://github.com/datawhalechina/team-learning-program/blob/master/Java/%E7%BB%83%E4%B9%A0%E9%A2%98%EF%BC%9A%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81.md(實例出處2)
5、https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E8%BF%87%E7%A8%8B%E8%AF%AD%E8%A8%80
6、搜索引擎及自我探索。
總結
- 上一篇: 分享一种简易的直流电机正反转限位电路
- 下一篇: 英语阅读小程序云开发项目