亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java面向?qū)ο蠹捌淙筇卣?

William_Sang / 1986人閱讀

摘要:面向?qū)ο缶幊趟枷朊嫦驅(qū)ο?,?jiǎn)單來(lái)說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。面向?qū)ο笫窍鄬?duì)于面向過程的。面向?qū)ο笕筇卣髅嫦驅(qū)ο笥腥筇卣?,即封裝繼承和多態(tài)。接口和抽象類接口接口名方法方法,默認(rèn)修飾符為,不能用其他修飾符修飾接口。

面向?qū)ο缶幊趟枷?/b>

面向?qū)ο?,?jiǎn)單來(lái)說就是由動(dòng)作的執(zhí)行者變?yōu)閯?dòng)作的操控者。結(jié)合具體例子來(lái)說就是使用某個(gè)人或者工具所具有的功能而不用去管功能的具體實(shí)現(xiàn)方式。例如現(xiàn)實(shí)中的項(xiàng)目開發(fā),老板想要實(shí)現(xiàn)某些功能,但是他自己不會(huì)這些技術(shù),所以他就會(huì)讓員工去做這些事情,通過借助別的擁有你想要實(shí)現(xiàn)某些功能的過程就可以理解為面向?qū)ο?。面向?qū)ο笫窍鄬?duì)于面向過程的。

類與對(duì)象
接著來(lái)了解下什么是 類與對(duì)象,世界是由什么組成的?我們這樣考慮,世界是由動(dòng)物、植物等組成的,動(dòng)物又分為哺乳動(dòng)物和非哺乳動(dòng)物,哺乳動(dòng)物又分為老虎、獅子、大象... ...可以繼續(xù)分類下去。通過這個(gè)例子我們對(duì)人類進(jìn)行分析,人都會(huì)直立行走、會(huì)說話、有兩個(gè)眼睛一個(gè)鼻子、會(huì)使用工具、會(huì)勞動(dòng)、會(huì)創(chuàng)造工具等特征,這就是人區(qū)別于其他動(dòng)物的原因,當(dāng)某個(gè)事物符合了人所具有的所有特征,我們就說他是一個(gè)人,老虎、獅子、海豚等不具備”人類“的某些特征,所以它們不是人。但是要注意:類不是具體的事物,而是由個(gè)體組成的集合。這樣的個(gè)體就叫做對(duì)象。

所以,類描述了一組有相同特性(屬性)和相同行為(方法)的對(duì)象。

面向?qū)ο笕筇卣?/strong>

面向?qū)ο笥腥筇卣鳎?strong>封裝、繼承和多態(tài)。

封裝
封裝,也就是隱藏,隱藏對(duì)象功能的實(shí)現(xiàn)細(xì)節(jié)和屬性或者不需要用戶知道的內(nèi)容,只提供與外部聯(lián)系的接口供用戶使用。

封裝的好處
1、減少代碼的耦合性,使代碼更加精簡(jiǎn)。

2、提高代碼的復(fù)用性,不必再重復(fù)寫功能相近的代碼。

封裝的具體實(shí)現(xiàn)就是將某一功能或?qū)傩猿殡x出來(lái),獨(dú)立寫成多帶帶的方法或類,對(duì)類及其屬性和方法設(shè)置訪問權(quán)限限定該功能或?qū)傩钥梢员惶囟ǖ脑L問者訪問,訪問權(quán)限有public、protected、private和默認(rèn)。

public:在任何類中都能訪問,即使不在同一包中。

protected:只能在本包和子類中訪問,即使子類不和父類在同一包中,也能訪問到。

private:只能在本類中被訪問,子類也訪問不到。

默認(rèn):只能在同一個(gè)包中被訪問到。

注意:類只能訪問其他類的public和protected修飾的屬性和方法,不能訪問到private修飾的。

來(lái)看具體例子:

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;
   }
}

這個(gè)簡(jiǎn)單的例子把人屬性封裝了進(jìn)去,外部只能調(diào)用相應(yīng)的get和set方法來(lái)對(duì)屬性進(jìn)行操作。

繼承
假設(shè)在描述某些事物的時(shí)候我們會(huì)發(fā)現(xiàn)他們具有許多相同的地方,例如鳥類,每種鳥都有眼睛,嘴巴,都會(huì)吃東西等,這些相同的地方可以把他們抽取出來(lái)定義成一個(gè)鳥類,當(dāng)需要描述多種鳥時(shí)就不用再重復(fù)定義這些共性,直接繼承鳥類即可,不必再重新續(xù)寫重復(fù)內(nèi)容。

注意:Java的繼承不是像C++一樣,Java只存在單繼承且智只能繼承父類的非私有成員,使用extends ,在調(diào)用子類構(gòu)造方法時(shí)會(huì)調(diào)用父類無(wú)參構(gòu)造方法,若父類沒有無(wú)參構(gòu)造,注意為其添加無(wú)參構(gòu)造方法。super()方法可調(diào)用父類方法或變量。繼承提高了程序的復(fù)用性、擴(kuò)展性,也是 多態(tài)特征的前提。

super和this的區(qū)別:

super(參數(shù)):調(diào)用父類的某一構(gòu)造函數(shù)

super.方法:調(diào)用父類中的方法;

super.變量名:調(diào)用父類中的變量

this:代表當(dāng)前對(duì)象名

this與super如果要在構(gòu)造函數(shù)里使用則都必須在構(gòu)造函數(shù)的第一行,所以不能同時(shí)存在與構(gòu)造函數(shù)里。

因?yàn)閟tatic不包含對(duì)象,this和super代表對(duì)象,所以不能在static域中使用super和this。

接口和抽象類
接口:interface 接口名{方法1;方法2…},默認(rèn)修飾符為 public ,不能用其他修飾符修飾接口。

抽象類:當(dāng)多個(gè)類都存在相同方法名,但是其實(shí)現(xiàn)方式卻不相同時(shí)可以將它們進(jìn)行抽取,定義成一個(gè)類,只有方法名沒有具體實(shí)現(xiàn),abstract class 類名{ abstract void…方法名();}

注意:僅實(shí)現(xiàn)抽象類的部分功能的類還是抽象類。抽象類除了不能被實(shí)例化外和正常類沒什么區(qū)別。

接口與抽象類的區(qū)別:接口可以被實(shí)現(xiàn)多個(gè)中間用逗號(hào)隔開,使用 implements 關(guān)鍵字實(shí)現(xiàn)接口,實(shí)現(xiàn)了接口類必須全部實(shí)現(xiàn)接口中的方法。如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實(shí)現(xiàn)了該接口的類。抽象類可以提供成員方法的實(shí)現(xiàn)細(xì)節(jié),而接口中只能存在public abstract 方法;抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;繼承抽象類如果不實(shí)現(xiàn)所有的抽象方法,子類必須聲明為抽象類。

java不支持多繼承,但是可以實(shí)現(xiàn)多個(gè)接口,形如

class Main extends A implements B,C...{ }
稍微注意下,接口之間也可以繼承,而且是可以多繼承(了解一下就行了,基本不提這個(gè))。

多態(tài)
多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。

多態(tài)存在的三個(gè)必要條件
繼承
重寫
父類引用指向子類對(duì)象

java的多態(tài)中涉及到向上轉(zhuǎn)型和向下轉(zhuǎn)型。

Father f = new Child();

上面的例子為向上轉(zhuǎn)型,父類引用指向子類對(duì)象。

Father f = new Child();
Child c = (Child) f;

向下轉(zhuǎn)型即當(dāng)我們有一個(gè)父類對(duì)象時(shí),我們想要實(shí)現(xiàn)子類中的某些方法功能時(shí)就需要向下轉(zhuǎn)型,上面的例子為向下轉(zhuǎn)型。

用一個(gè)具體的實(shí)例說明向上轉(zhuǎn)型與向下轉(zhuǎn)型

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();//自動(dòng)向上轉(zhuǎn)型
       a.sleep(); //Animal 類中定義了此方法,而子類中也重寫了此方法,調(diào)用的是子類中的sleep()方法
       a.eat();
//a.ability();  編譯失敗,因?yàn)?a是父類Animal類的引用,而Animal類中未定義此方法,所以會(huì)報(bào)錯(cuò)
       getAbility(a);
   }
   public static void getAbility(Animal a){
       if(a instanceof Cat) {
           Cat c = (Cat) a;//向下轉(zhuǎn)型,使用instanceof關(guān)鍵字判斷是否是指定類的對(duì)象
           c.ability();
       }
       if(a instanceof Dog){
           Dog d = (Dogs) a;
           d.ability();
       }
   }
}



/**

*  執(zhí)行結(jié)果為:

*  貓睡覺

*  貓吃魚

*  貓抓老鼠

*/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77402.html

相關(guān)文章

  • java面向對(duì)象三大特征

    摘要:面向?qū)ο蟮娜筇卣鞣庋b繼承多態(tài)。以本文為例,類中的變量為私有變量,只能通過創(chuàng)建對(duì)象此時(shí)構(gòu)造方法自動(dòng)調(diào)用來(lái)賦值。 java面向?qū)ο蟮娜筇卣鳎悍庋b、繼承、多態(tài)。 以本文為例,User類中的變量為私有變量,只能通過創(chuàng)建對(duì)象(此時(shí)構(gòu)造方法自動(dòng)調(diào)用)來(lái)賦值。外界只能通過公有方法api()來(lái)訪問User類。 Admin類繼承了User類,調(diào)用了其構(gòu)造方法,還重寫了method_1方法,增加了...

    susheng 評(píng)論0 收藏0
  • JavaScript面向對(duì)象三大特征

    摘要:什么是面向?qū)ο蟊疚牟辉谡撌?。接下?lái)說一下面向?qū)ο蟮娜筇卣髟诋?dāng)中的實(shí)現(xiàn)。封裝實(shí)現(xiàn)封裝實(shí)現(xiàn)就是是對(duì)象內(nèi)部的變化對(duì)外界是透明的不可見。這種做法使對(duì)象之間低耦合便于維護(hù)升級(jí)團(tuán)隊(duì)協(xié)作開發(fā)。。 概述 本來(lái)打算寫設(shè)計(jì)模式的,在談?wù)搄s的設(shè)計(jì)模式之前先說一下js的面向?qū)ο?因?yàn)楹芏嘣O(shè)計(jì)模式的實(shí)現(xiàn)都摻雜著面向?qū)ο蟮乃枷?所以先做一下前期鋪墊。 js我們都知道是一種動(dòng)態(tài)類型腳本型語(yǔ)言,變量類型無(wú)法保證,...

    chaosx110 評(píng)論0 收藏0
  • javascript的面向對(duì)象

    摘要:二封裝封裝性就是把類對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽類對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。 javascript的面向?qū)ο?面向?qū)ο蟮奶攸c(diǎn)分為三類:繼承 封裝 多態(tài) 首先你得理解面向過程:假如把一件東西放到一個(gè)箱子里,面向過程就是第一部打開箱子,然后把東西放進(jìn)去,然后關(guān)閉箱子: 面向?qū)ο?就是把箱子看成一個(gè)對(duì)象,這個(gè)...

    alaege 評(píng)論0 收藏0
  • Java面向對(duì)象

    摘要:類用于描述客觀世界里某一類對(duì)象的共同特征,而對(duì)象則是類的具體的存在,程序使用類的構(gòu)造器來(lái)創(chuàng)建該類的對(duì)象。也支持面向?qū)ο蟮娜筇卣鞣庋b繼承和多態(tài)。構(gòu)造器用于對(duì)類實(shí)例進(jìn)行初始化操作,構(gòu)造器支持重載。 Java是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,Java語(yǔ)言提供了定義類、成員變量、方法等最基本的功能。類可被認(rèn)為是一種自定義的數(shù)據(jù)類型,可以使用類來(lái)定義變量。類用于描述客觀世界里某一類對(duì)象的共同特征,而對(duì)...

    kid143 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<