最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中面向?qū)ο蟮闹R(shí)點(diǎn)總結(jié)

 更新時(shí)間:2017年02月25日 11:37:20   作者:晴明_  
Java是一門(mén)面向?qū)ο蟮恼Z(yǔ)言。對(duì)象是Java程序中的基本實(shí)體。除了對(duì)象之外Java程序同樣處理基本數(shù)據(jù)。下面這篇文章主要給大家總結(jié)了關(guān)于Java中面向?qū)ο蟮闹R(shí)點(diǎn),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

一、對(duì)象和類的概念

類:對(duì)具有相同屬性和方法的一類事物的抽象。

對(duì)象:具體的某一事物,代表自身的一些屬性和方法。

二、類(對(duì)象)之間的關(guān)系

關(guān)聯(lián)(組合、聚合),繼承,依賴、實(shí)現(xiàn)

三、面向?qū)ο笤O(shè)計(jì)思想

面向?qū)ο?--》考慮哪些類,對(duì)象---》類和對(duì)象有屬性、方法-----》類和類之間的關(guān)系

四、重載、重寫(xiě)和隱藏

1). 重載(overload):

方法重載就是多個(gè)方法名稱相同但是參數(shù)類型或者參數(shù)個(gè)數(shù)不同的方法,與返回值類型和修飾符無(wú)關(guān)

class Test {
 public int test(int a) {
  return a;
 }

 public String test(String a) {
  return a;
 }

 public float test(int a, String b) {
  return 0f;
 }

 public float test(String a, int b) {
  return 1.0f;
 }

 String test(float a) {
  return "";
 }

 String test(int a) {//該方法不是重載 
  return "";
 }
}

前面五個(gè)互為重載,第一個(gè)和第六個(gè)雖然返回值類型不同,但參數(shù)相同,所以第一個(gè)和第六個(gè)參數(shù)不是重載

2). 重寫(xiě)(override):

子類繼承父類時(shí),子類的方法名稱、參數(shù)類型、參數(shù)個(gè)數(shù)與父類完全相同,則認(rèn)為子類重寫(xiě)了父類的方法。

方法重寫(xiě)規(guī)則:

  1. 參數(shù)列表和原方法完全相同
  2. 返回值類型和原方法相同或者為父類返回值類型的子類型
  3. 不能比原方法限制更嚴(yán)格的訪問(wèn)級(jí)別(舉例:父類方法為public,那么子類不能為protected、private)
  4. 父類方法被定義為final時(shí),則不能被重寫(xiě)
  5. 父類方法被定義為static時(shí),不能被重寫(xiě),但是可以重寫(xiě)聲明一個(gè)相同的方法(參考隱藏)
  6. 不能拋出新的異?;虮仍椒ǜ鼜V泛的異常(父類拋出IOException,重寫(xiě)方法不能拋出Exception只能拋出IOException或者IOException子類異常)

3). 隱藏:

隱藏是針對(duì)于父類的成員變量和靜態(tài)方法而言的。子類中聲明了和父類相同的變量名或靜態(tài)方法(方法名相同、參數(shù)列表相同、返回類型相同)則實(shí)現(xiàn)了對(duì)父類成員變量和靜態(tài)方法的隱藏,下面舉個(gè)例子有助理解:

class A { 
 static int a = 1; 
 static int b = 2; 
 int c = 33;

 public static void printA() { 
  System.out.print(a); 
 } 

 public static void printB() { 
  System.out.print(b); 
 } 

}

class B extends A { 
 static int a = 3; 
 static int b = 4;
 int c = 44;

 public static void printB() { 
  System.out.print(b); 
 } 
}

public class Test { 
 public static void main(String[] args) { 
  B.printA();
  B.printB();
  System.out.print(B.a); 

  A a = new B();
  B b = new B();

  a.printB();
  b.printB();
  System.out.print(a.c);
  System.out.print(b.c);
 } 
} 

輸出結(jié)果:

1 4 3 2 4 33 44

如果子類中有相同名稱的靜態(tài)方法或變量父類的會(huì)被隱藏,如果子類中存在同名的靜態(tài)方法或變量,則會(huì)隱藏父類中得靜態(tài)方法或變量,此時(shí)子類調(diào)用的就是子類中自己的靜態(tài)方法或變量;如果子類中不存在同名的靜態(tài)方法或變量,則會(huì)調(diào)用父類中的靜態(tài)方法或變量;父類調(diào)用的始終是其本身的靜態(tài)方法和變量。

五、封裝:

封裝是把對(duì)象的屬性和操作結(jié)合為一個(gè)獨(dú)立的整體,隱藏對(duì)象內(nèi)部操作的實(shí)現(xiàn),用戶只需要通過(guò)其對(duì)外提供的方法來(lái)訪問(wèn)該對(duì)象,無(wú)需知道其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。

優(yōu)點(diǎn):

  1. 隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),提供公共訪問(wèn)方式
  2. 類內(nèi)部可以自由修改不影響其調(diào)用者
  3. 減少耦合度,提高安全性

六、繼承:

繼承是一個(gè)對(duì)象獲取另一個(gè)對(duì)象屬性的過(guò)程,關(guān)鍵字為extends和implements。

1). IS-A關(guān)系(一個(gè)對(duì)象所屬于另一個(gè)對(duì)象):

方式一. 用extends來(lái)實(shí)現(xiàn)繼承:

public class Animal {
 public void eat() {
  System.out.println("Animal eating...");
 }
}

public class Mammal extends Animal {
 public void eat() {
  System.out.println("Mammal eating...");
 }
}

public class Dog extends Mammal {
 public void eat() {
  System.out.println("Dog eating...");
 }
}

方式二. 用implements來(lái)實(shí)現(xiàn)繼承:

public interface Animal {
 void eat();
}

public class Mammal extends Animal {
 public void eat() {
  System.out.println("Mammal eating...");
 }
}

public class Dog extends Mammal {
 public void eat() {
  System.out.println("Dog eating...");
 }
}

無(wú)論方式一還是方式二,我們都可以用instanceof關(guān)鍵字檢查得出:Mammal是一個(gè)Animal(哺乳動(dòng)物也是動(dòng)物);Dog既是一個(gè)Mammal,也是一個(gè)Animal(狗既是哺乳動(dòng)物也是動(dòng)物)。

public class Test { 
  /**
  * instanceof關(guān)鍵字檢查代碼
  */
 public static void main(String[] args) {
  Mammal m = new Mammal();
  Dog d = new Dog();
  System.out.print(m instanceof Animal);
  System.out.print(d instanceof Mammal);
  System.out.print(d instanceof Animal);
 }
}

輸出結(jié)果:

true true true

2). HAS-A關(guān)系(一個(gè)對(duì)象含有另一個(gè)對(duì)象的一些屬性):

public class Car{}

public class Speed{}

public class Benz extends Car{
 private Speed sp; 
}

Benz含有Spend屬性,但Benz不是Spend

七、多態(tài):

實(shí)現(xiàn)多態(tài)的三個(gè)必要條件:繼承、重寫(xiě)、父類引用指向子類對(duì)象。

1). 向上轉(zhuǎn)型:

我們實(shí)例化一個(gè)Dog對(duì)象可以用 Dog d = new Dog(); 我們也可以用 Animal d = new Dog(); ,后者就是向上轉(zhuǎn)型(父引用指向子對(duì)象),上面兩種方式創(chuàng)建出來(lái)的對(duì)象d,調(diào)用d.eat();輸出的結(jié)果都是Dog eating...,這就體現(xiàn)出了java得多態(tài)。向上轉(zhuǎn)型創(chuàng)建的對(duì)象會(huì)遺失掉和父類不同的方法和變量(不能用來(lái)調(diào)用子類特有的方法和變量)。

2). 舉例說(shuō)明:

class A {
 public String show(D obj) {
  return ("A and D");
 }

 public String show(A obj) {
  return ("A and A");
 }
}

class B extends A {
 public String show(B obj) {
  return ("B and B");
 }

 public String show(A obj) {
  return ("B and A");
 }
}

class C extends B {}

class D extends B {}

class Test {
 public static void main(String[] args) {
  A a1 = new A();
  A a2 = new B();
  B b = new B();
  C c = new C();
  D d = new D();
  System.out.println(a1.show(b)); // ①
  System.out.println(a1.show(c)); // ②
  System.out.println(a1.show(d)); // ③
  System.out.println(a2.show(b)); // ④
  System.out.println(a2.show(c)); // ⑤
  System.out.println(a2.show(d)); // ⑥
  System.out.println(b.show(b)); // ⑦
  System.out.println(b.show(c)); // ⑧
  System.out.println(b.show(d)); // ⑨
 }
}

輸出結(jié)果:

A and A    //  ①
A and A    //  ②
A and D    //  ③
B and A    //  ④
B and A    //  ⑤
A and D    //  ⑥
B and B    //  ⑦
B and B    //  ⑧
A and D    //  ⑨

前三個(gè)比較簡(jiǎn)單不容易出錯(cuò),看看下面幾個(gè):

  • ④:a2是A的引用指向B對(duì)象,向上轉(zhuǎn)型創(chuàng)建的對(duì)象會(huì)遺失掉和父類不同的方法和變量,所以a2只能調(diào)用show(D obj) 、show(A obj)兩個(gè)方法,所以a2.show(b)應(yīng)該調(diào)用show(A obj)方法,B中重寫(xiě)了該方法,所以運(yùn)行時(shí)JVM會(huì)調(diào)用B類中重寫(xiě)的show(A obj)方法,所以輸出B and A
  • ⑤: 原理同④;
  • ⑥:a2.show(d)應(yīng)該調(diào)用show(D obj)方法,B中沒(méi)有重寫(xiě)該方法所以調(diào)用的為A類中的該方法,所以輸出為A and D;
  • ⑦⑧⑨:b為B類對(duì)象,可調(diào)用A類中show(D obj) 、B類中show(B obj) 、B類中show(A obj)方法,所以輸出如上。

總結(jié)

以上就是關(guān)于Java面向?qū)ο笾R(shí)點(diǎn)整理的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用java能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • Java中和隊(duì)列相關(guān)的基本操作

    Java中和隊(duì)列相關(guān)的基本操作

    在Java中,隊(duì)列是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和管理元素。Java提供了Queue接口和其實(shí)現(xiàn)類,包括LinkedList和ArrayDeque等。隊(duì)列的基本操作包括入隊(duì)(enqueue)、出隊(duì)(dequeue)、獲取隊(duì)首元素(peek)和判斷隊(duì)列是否為空(isEmpty)。
    2023-09-09
  • Java中switch的三種用法方式小結(jié)

    Java中switch的三種用法方式小結(jié)

    這篇文章主要介紹了Java中switch的三種用法方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用maven項(xiàng)目pom.xml文件配置打包功能和靜態(tài)資源文件自帶版本號(hào)功能

    使用maven項(xiàng)目pom.xml文件配置打包功能和靜態(tài)資源文件自帶版本號(hào)功能

    在Maven項(xiàng)目中,通過(guò)pom.xml文件配置打包功能,可以控制構(gòu)建過(guò)程,生成可部署的包,同時(shí),為了緩存控制與版本更新,可以在打包時(shí)給靜態(tài)資源文件如JS、CSS添加版本號(hào),這通常通過(guò)插件如maven-resources-plugin實(shí)現(xiàn)
    2024-09-09
  • 基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控步驟

    基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控步驟

    這篇文章主要介紹了基于Idea+Jconsole實(shí)現(xiàn)線程監(jiān)控功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 關(guān)于Netty--Http請(qǐng)求處理方式

    關(guān)于Netty--Http請(qǐng)求處理方式

    這篇文章主要介紹了關(guān)于Netty--Http請(qǐng)求處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 基于Java回顧之多線程詳解

    基于Java回顧之多線程詳解

    在這篇文章里,我們關(guān)注多線程。多線程是一個(gè)復(fù)雜的話題,包含了很多內(nèi)容,這篇文章主要關(guān)注線程的基本屬性、如何創(chuàng)建線程、線程的狀態(tài)切換以及線程通信,我們把線程同步的話題留到下一篇文章中
    2013-05-05
  • File.createTempFile創(chuàng)建臨時(shí)文件的示例詳解

    File.createTempFile創(chuàng)建臨時(shí)文件的示例詳解

    這篇文章主要介紹了File.createTempFile創(chuàng)建臨時(shí)文件的示例詳解,在默認(rèn)臨時(shí)文件目錄中創(chuàng)建一個(gè)空文件,使用給定前綴和后綴生成其名稱。 如果感興趣來(lái)了解一下
    2020-07-07
  • 分析HashMap 的 JDK 源碼

    分析HashMap 的 JDK 源碼

    這篇文章主要分析了HashMap 的 JDK 源碼,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-10-10
  • spring boot項(xiàng)目打包成war在tomcat運(yùn)行的全步驟

    spring boot項(xiàng)目打包成war在tomcat運(yùn)行的全步驟

    這篇文章主要給大家介紹了關(guān)于spring boot項(xiàng)目打包成war在tomcat運(yùn)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java遞歸模糊查詢文件實(shí)例代碼

    Java遞歸模糊查詢文件實(shí)例代碼

    遞歸算法是一種直接或間接地調(diào)用自身的算法,在計(jì)算機(jī)編寫(xiě)程序中,遞歸算法對(duì)解決一大類問(wèn)題是十分有效的,它往往使算法的描述簡(jiǎn)潔而且易于理解,這篇文章主要給大家介紹了關(guān)于Java遞歸模糊查詢文件的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

大庆市| 高尔夫| 府谷县| 龙岩市| 大关县| 买车| 方山县| 新营市| 三河市| 东丽区| 林州市| 石渠县| 佛山市| 高阳县| 孟州市| 吐鲁番市| 乐安县| 镇赉县| 龙州县| 赞皇县| 漳州市| 合江县| 恭城| 湖南省| 景德镇市| 怀仁县| 兴仁县| 张家界市| 定边县| 琼结县| 内江市| 蓝田县| 扶风县| 汉川市| 揭阳市| 洱源县| 屏南县| 旅游| 安化县| 桓仁| 太和县|