搜尋
首頁Javajava教程java-物件導向詳細介紹(一)

java-物件導向詳細介紹(一)

Aug 22, 2019 pm 05:16 PM
物件導向

1、什麼叫做物件導向?

物件導向(Object-Oriented,簡稱OO)就是一個常見的程式結構設計方法。
物件導向思想的基礎是將相關的資料和方法放在一起,組合成一種新的複合資料類型,然後使用新建立的複合資料類型作為專案的基礎。

物件導向是一個很抽象的概念,它相對面向過程而言。

過程與物件都是一種解決問題的想法。

面向過程:強調的是功能行為,一種過程,先幹啥,再幹啥;

物件導向:將功能封裝到物件裡,強調的是具備某功能的物件;

依照物件導向的思想,可以把任何的東西看做物件!

物件導向的三個特徵:

封裝(Encapsulation);

繼承(Inheritance);

多型( Polymorphism)。

我的總結:

面向過程:強調的是具體的功能實現;(執行者)

物件導向:強調的是具備功能的物件。 (管理者)

2、類別

類別(class)是Java 語言的最小程式單位,也是設計與實作Java 程式的基礎,本部分將深入介紹類的相關知識。
類別的概念
類別是一組事物共有特徵和功能的描述。類別是對於一組事物的總體描述,是按照物件導向技術進行設計時最小的單位,也是組成專案的最基本的模組。類別的概念是抽象的,類似於建築設計中的圖紙,是對於現實需要代表的具體內容的抽象。類別只包含框架結構,而不包含具體的資料。所以類別代表的是總體,而不代表某個特定的個體。

我的總結:類別是抽象的,物件是具體的,實實在在的!

類別的定義:

[修飾符] class  類別名稱{

      1~n個建構方法;

        0~n個欄位;

        0~n個方法

}

定義類,其實就是在定義類別裡面的物件

物件包含:

狀態; (屬性)

功能、行為;(方法)

透過類別來描述物件;

狀態--------成員變數;

功能、行為-方法;

Eg

class Person{
//属性
   private String name;
   private int age;
   private int sal;
   //方法
   public void show(){
      System.out.println("个人情况:"+name+age+sal);
   }
}

3、建構方法

##建構方法:用來建構類別的實例(每一個類別都預設有一個無參的建構方法,得使用new呼叫)

欄位:類別或物件所包含的數據,對類別狀態的一種描述;

方法:類別或物件的特徵或行為

作用:

給類別中的欄位進行初始化,可以用來建立物件。

特點:

方法名稱與類別名稱相同

不用定義回傳值類型

不需要寫return語句

注意

預設建構方法的特性。

多個建構方法是以重載的形式存在的。

建構方法的重載:(需要哪一個就去適配哪個,呼叫哪個)

this([實參]);呼叫目前類別的建構方法

#注意: this([實參]);必須放在建構器的第一行;

物件的產生格式

類名稱  物件名稱= new  類別名稱();

因為有(),所以是方法,實際上它就是建構方法,且是非私有的建構方法。

如:

CellPhone cp = new CellPhone();
Eg:
 
class Person{
 
   private String name;
 
   private int age;
 
   private int sal;
 
   public void show(){
 
      System.out.println("个人情况:"+name+age+sal);
 
   }
 
 
 
   public Person(String name) {
 
      super();
 
      this.name = name;
 
   }
 
 
 
   public Person(String name, int age) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
   }
 
 
 
   public Person(String name, int age, int sal) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
      this.sal = sal;
 
   }
 
}

4、static關鍵字#

特點:

隨著類別的載入而載入

#優先於物件存在

被所有物件所共享

可以直接被類別名稱呼叫

使用注意

靜態方法只能存取靜態成員

但是非靜態成員方法可以存取靜態成員;

靜態方法中不可以使用this,super關鍵字

主方法(main)是靜態的(可以利用類別名稱去呼叫靜態的main方法,很正常!但是會陷入死循環,導致記憶體溢出,jvm自動停止!)

public static void main(String[] agrs){}





#可修飾欄位,方法。

用static 修飾的成員表示它屬於這個類別共有,而不是屬於該類別的單一實例。

###                static 修飾的字段欄位######             #不屬於類。 ######               以沒有static 修飾的欄位== 執行個體欄位######         選擇與方法的語法:######存取類別成員:        類別.欄位     類別.方法######存取實例成員:   實例.欄位     ##:######static 修飾的欄位和方法,既可以透過類別調用,也可以使用實例調用;######沒static 修飾的欄位和方法,只能使用實例來調用(建議使用:類別名稱來呼叫;        其實在底層,物件呼叫類別成員,也會轉換類別名稱呼叫)######static關鍵字不能與this,super同時連用! ##################5、匿名物件#########一個沒有名字的物件,  創造了一個物件出來,沒有賦給一個變數;# ##############特點:######對方法或欄位只進行一次呼叫時;######可作為實際參數傳遞;###### #只在堆裡面開闢儲存區域,#########只能使用一次,  使用完就被銷毀了;#########何時使用?只拿來用一次! ! ######new Person();表示匿名物件,沒有名字的物件###

new Person().age = 17;//使用一次之后就被销毁了

6、this关键字

特点:this表示当前对象。

当前对象  ←→  当前正在调用实例成员的对象

换言之:谁调用了方法,谁就是当前对象。

什么时候使用this关键字呢?

方法间的相互调用;

this.字段;

构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。

this不能用在static修饰的方法里和static修饰的代码块里;

Eg:构造方法中的this.name = name;

7、面向对象之封装

封装的两个含义:

1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);

2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;

封装机制在程序中的体现是:

把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。

程序中的一种体现:

通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。

boolean 类型的变量没有getXX,只有 isXX;

 
Eg:
 
class Person1{
 
   private String name;
 
   private int age;
 
   private int sal;
 
  
 
   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;
 
   }
 
}

8、访问修饰符

private 类访问权限:本类内部可以访问,不能继承到子类;

default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;

protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;

public 公共访问权限:任何地方都可以访问,能继承到子类;

总结:

java-物件導向詳細介紹(一)

9、類別的設計分析

#分析想法:

根據要求寫出類所包含的欄位;

所有的欄位都必須私有化;

封裝之後的欄位可透過setter和getter設值和取得;

依需求可加若干建構方法;

根據需求可加入對應的方法;

類別中的所有方法都不要直接處理(輸出列印),而是交給呼叫者去處理。

10、物件導向之繼承 

#首先有反映一般事物特性的類別,然後在此基礎上反映出特殊事物的類;

也就是說:繼承是一種從一般到特殊的關係;

##特徵

1、提高了程式碼的複用性。

2、讓類別與類別之間產生關係,有了這個繼承關係才有了多態的特性。

3、Java語言中只支援單繼承(有別於C語言)。

因為多重繼承容易帶來安全隱患(父類別多了, 功能相同的話,就會出現呼叫不確定性嗎,覆寫一個方法,到底覆寫的誰的?)。

ps:介面可以實作多重繼承

4、Java支援多層繼承,object是每個類別的超類,實作樹形結構。

我的總結:

繼承是多態的前提。

對類別而言,只支援單繼承。

格式:

        [修飾符] class SubClass extends SuperClass

依照這個關係,我們把SuperClass類別稱為父類別或基底類,把SubClass稱為子類別或衍生類別或拓展類別;

#我的總結:

java.lang.Object是所有類別的父類,

        Object要麼是直接父類別要麼是間接父類別。

Eg:

學生屬於人的一種特殊情況,此時我把人的共性寫在Person類裡面,為了讓學生擁有這些共性(別的比如老師也可以有這些共性),然後我就讓學生來拓展Person類。

我的總結:

子類別與父類別的關係:

子類別拓展父類別(子類別是父類別的一種特殊情況)

主要是以父類別為基礎,然後新增屬於自己的欄位和方法。

父類別的私有成員子類別不能繼承到;

父類別的建構方法不能被繼承;

Java只支援單繼承,不支援多重繼承;/ /不然的話,例如show方法,繼承了多個,不知道到底呼叫那一個。

一個類別有且只有一個直接父類別;

一個類別沒顯示的繼承其他的一個類別的時候,預設的直接父類別就是Object類別;

# Student 的直接父類別是Person,Object類別也是Student類別的父類別,但是是間接父類別;

一旦一個類別顯示的繼承了其他的一個類別的時候,此時預設的直接父類Object就會被取消;

Java裡一個類別只能有一個直接父類別;

java.lang.Object是所有類別的父類,Object要嘛是直接父類別要嘛是間接父類。

子類別物件實例化過程

在繼承操作中,對於子類別物件的實例化:

子類別物件在實例化之前必須先呼叫父類別中的構造方法之後再呼叫自身的構造方法。

以上是本片文章的部分內容,後續會繼續為大家整理物件導向知識。不對的地方請指出,謝謝!

更多相關問題請上PHP中文網:JAVA影片教學

#

以上是java-物件導向詳細介紹(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版