摘要:面向對象編程思想面向對象,簡單來說就是由動作的執行者變為動作的操控者。面向對象是相對于面向過程的。面向對象三大特征面向對象有三大特征,即封裝繼承和多態。接口和抽象類接口接口名方法方法,默認修飾符為,不能用其他修飾符修飾接口。
面向對象編程思想
面向對象,簡單來說就是由動作的執行者變為動作的操控者。結合具體例子來說就是使用某個人或者工具所具有的功能而不用去管功能的具體實現方式。例如現實中的項目開發,老板想要實現某些功能,但是他自己不會這些技術,所以他就會讓員工去做這些事情,通過借助別的擁有你想要實現某些功能的過程就可以理解為面向對象。面向對象是相對于面向過程的。
類與對象
接著來了解下什么是 類與對象,世界是由什么組成的?我們這樣考慮,世界是由動物、植物等組成的,動物又分為哺乳動物和非哺乳動物,哺乳動物又分為老虎、獅子、大象... ...可以繼續分類下去。通過這個例子我們對人類進行分析,人都會直立行走、會說話、有兩個眼睛一個鼻子、會使用工具、會勞動、會創造工具等特征,這就是人區別于其他動物的原因,當某個事物符合了人所具有的所有特征,我們就說他是一個人,老虎、獅子、海豚等不具備”人類“的某些特征,所以它們不是人。但是要注意:類不是具體的事物,而是由個體組成的集合。這樣的個體就叫做對象。
所以,類描述了一組有相同特性(屬性)和相同行為(方法)的對象。
面向對象三大特征
面向對象有三大特征,即封裝、繼承和多態。
封裝
封裝,也就是隱藏,隱藏對象功能的實現細節和屬性或者不需要用戶知道的內容,只提供與外部聯系的接口供用戶使用。
封裝的好處
1、減少代碼的耦合性,使代碼更加精簡。
2、提高代碼的復用性,不必再重復寫功能相近的代碼。
封裝的具體實現就是將某一功能或屬性抽離出來,獨立寫成多帶帶的方法或類,對類及其屬性和方法設置訪問權限限定該功能或屬性可以被特定的訪問者訪問,訪問權限有public、protected、private和默認。
public:在任何類中都能訪問,即使不在同一包中。
protected:只能在本包和子類中訪問,即使子類不和父類在同一包中,也能訪問到。
private:只能在本類中被訪問,子類也訪問不到。
默認:只能在同一個包中被訪問到。
注意:類只能訪問其他類的public和protected修飾的屬性和方法,不能訪問到private修飾的。
來看具體例子:
public class Person { private String name; private int age; private String id; 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 String getId() { return id; } public void setId(String id) { this.id = id; } }
這個簡單的例子把人屬性封裝了進去,外部只能調用相應的get和set方法來對屬性進行操作。
繼承
假設在描述某些事物的時候我們會發現他們具有許多相同的地方,例如鳥類,每種鳥都有眼睛,嘴巴,都會吃東西等,這些相同的地方可以把他們抽取出來定義成一個鳥類,當需要描述多種鳥時就不用再重復定義這些共性,直接繼承鳥類即可,不必再重新續寫重復內容。
注意:Java的繼承不是像C++一樣,Java只存在單繼承且智只能繼承父類的非私有成員,使用extends ,在調用子類構造方法時會調用父類無參構造方法,若父類沒有無參構造,注意為其添加無參構造方法。super()方法可調用父類方法或變量。繼承提高了程序的復用性、擴展性,也是 多態特征的前提。
super和this的區別:
super(參數):調用父類的某一構造函數
super.方法:調用父類中的方法;
super.變量名:調用父類中的變量
this:代表當前對象名
this與super如果要在構造函數里使用則都必須在構造函數的第一行,所以不能同時存在與構造函數里。
因為static不包含對象,this和super代表對象,所以不能在static域中使用super和this。
接口和抽象類
接口:interface 接口名{方法1;方法2…},默認修飾符為 public ,不能用其他修飾符修飾接口。
抽象類:當多個類都存在相同方法名,但是其實現方式卻不相同時可以將它們進行抽取,定義成一個類,只有方法名沒有具體實現,abstract class 類名{ abstract void…方法名();}
注意:僅實現抽象類的部分功能的類還是抽象類。抽象類除了不能被實例化外和正常類沒什么區別。
接口與抽象類的區別:接口可以被實現多個中間用逗號隔開,使用 implements 關鍵字實現接口,實現了接口類必須全部實現接口中的方法。如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現了該接口的類。抽象類可以提供成員方法的實現細節,而接口中只能存在public abstract 方法;抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;繼承抽象類如果不實現所有的抽象方法,子類必須聲明為抽象類。
java不支持多繼承,但是可以實現多個接口,形如
class Main extends A implements B,C...{ }
稍微注意下,接口之間也可以繼承,而且是可以多繼承(了解一下就行了,基本不提這個)。
多態
多態是同一個行為具有多個不同表現形式或形態的能力。
多態存在的三個必要條件
繼承
重寫
父類引用指向子類對象
java的多態中涉及到向上轉型和向下轉型。
Father f = new Child();
上面的例子為向上轉型,父類引用指向子類對象。
Father f = new Child(); Child c = (Child) f;
向下轉型即當我們有一個父類對象時,我們想要實現子類中的某些方法功能時就需要向下轉型,上面的例子為向下轉型。
用一個具體的實例說明向上轉型與向下轉型
abstract class Animal{ public abstract void eat(); public abstract void sleep(); } class Cat extends Animal{ public void eat() { System.out.println("貓吃魚"); } public void sleep() { System.out.println("貓睡覺"); } public void ability() { System.out.println("貓抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨頭"); } public void sleep() { System.out.println("狗睡覺"); } public void ability() { System.out.println("狗看家"); } } public class DuoTai{ public static void main(String[] args){ Animal a = new Cat();//自動向上轉型 a.sleep(); //Animal 類中定義了此方法,而子類中也重寫了此方法,調用的是子類中的sleep()方法 a.eat(); //a.ability(); 編譯失敗,因為 a是父類Animal類的引用,而Animal類中未定義此方法,所以會報錯 getAbility(a); } public static void getAbility(Animal a){ if(a instanceof Cat) { Cat c = (Cat) a;//向下轉型,使用instanceof關鍵字判斷是否是指定類的對象 c.ability(); } if(a instanceof Dog){ Dog d = (Dogs) a; d.ability(); } } } /** * 執行結果為: * 貓睡覺 * 貓吃魚 * 貓抓老鼠 */
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77402.html
摘要:面向對象的三大特征封裝繼承多態。以本文為例,類中的變量為私有變量,只能通過創建對象此時構造方法自動調用來賦值。 java面向對象的三大特征:封裝、繼承、多態。 以本文為例,User類中的變量為私有變量,只能通過創建對象(此時構造方法自動調用)來賦值。外界只能通過公有方法api()來訪問User類。 Admin類繼承了User類,調用了其構造方法,還重寫了method_1方法,增加了...
摘要:什么是面向對象本文不在論述。接下來說一下面向對象的三大特征在當中的實現。封裝實現封裝實現就是是對象內部的變化對外界是透明的不可見。這種做法使對象之間低耦合便于維護升級團隊協作開發。。 概述 本來打算寫設計模式的,在談論js的設計模式之前先說一下js的面向對象,因為很多設計模式的實現都摻雜著面向對象的思想,所以先做一下前期鋪墊。 js我們都知道是一種動態類型腳本型語言,變量類型無法保證,...
摘要:二封裝封裝性就是把類對象的屬性和行為結合成一個獨立的相同單位,并盡可能隱蔽類對象的內部細節,對外形成一個邊界,只保留有限的對外接口使之與外部發生聯系。 javascript的面向對象 面向對象的特點分為三類:繼承 封裝 多態 首先你得理解面向過程:假如把一件東西放到一個箱子里,面向過程就是第一部打開箱子,然后把東西放進去,然后關閉箱子: 面向對象:就是把箱子看成一個對象,這個...
閱讀 3114·2023-04-25 15:44
閱讀 1887·2019-08-30 13:11
閱讀 2847·2019-08-30 11:11
閱讀 3066·2019-08-29 17:21
閱讀 1317·2019-08-29 15:38
閱讀 959·2019-08-29 12:49
閱讀 1807·2019-08-28 18:19
閱讀 3232·2019-08-26 14:01