1. 程式人生 > >Java 面向物件知識小結

Java 面向物件知識小結

類的繼承:

在Java中,一個類只能從一個父類繼承,而不能從多個類中繼承。這種繼承方式稱為“單繼承”。

在Java中,如果你定義了一個類,這個類沒有繼承任何父類,那麼,系統會自動將這個類的父類設定為java.lang.Object,例如:

public class Person(){
…
}
//實際上等價於:
Public class Person extends java.lang.Object{
…
}

訪問控制修飾符:

在Java中,雖然一個子類只能繼承一個父類,但是,一個父類可以派生出多個子類。

在Java中,定義了三個修飾符來控制類,類的屬性以及類的方法等的訪問範圍。通過這三個修飾符,可以定義四種程度的限制。

Private:這是限制最嚴格的一個修飾符,使用這個關鍵字來限制的屬性或者方法,只能在同一個類中被訪問。也就是說,在這個類檔案之外,這些屬性或方法是被隱藏的。這個修飾符最常用於修飾類中的全域性變數。注意,這個修飾符不能用在類的前面。

Protected:protected修飾符修飾的屬性或方法,可以被同一個類、同一個包中的類以及子類訪問。注意:這個修飾符同樣不能用於類前面。

Public:這個修飾符對類、類的屬性以及類的方法均可用。它的限制是最寬鬆的,使用這個修飾符修飾的類屬性、類的方法可以被任何其他的類訪問,無論這個類是否在同一個包中,以及是否為子類等。

Default:default不是關鍵字,只是對類、類的屬性和方法的訪問許可權的一種稱呼。如果在類、類的屬性和方法前面沒有新增任何的修飾符,則訪問許可權為default。此時,只有類本身或者同一個包中的其他類可以訪問這些屬性或方法。

一般來說,我們應該將和其他類無關的屬性或者方法設定為private,只有需要將它給其他的類訪問的屬性或方法才將它設定為public或者protected,或者不加任何修飾符,讓其為default。

方法的覆蓋:

當一個子類繼承了一個父類時,它也同時繼承了父類的屬性和方法,如果不滿足子類的需求,子類可以對父類的方法進行覆蓋(Override)。覆蓋過程中,需要提供和父類中被覆蓋方法相同的方法名稱、輸入引數以及返回型別。另外,不能使用比父類中的被覆蓋方法更嚴格的訪問許可權。

Super關鍵字

Super的作用是引用父類的成員,例如屬性、方法或者是構造器。

父類必須自己負責初始化它自己的狀態而不是讓子類來做,因此,如果子類的構造器中沒有顯示地呼叫父類構造器,也沒有在構造器中呼叫過載的其他構造器,則系統將會預設呼叫父類中無引數的構造器。此時,如果父類中沒有無引數的構造器,則編譯將會報錯。

父類的屬性或方法必須是那些protected或者public等可以讓子類中訪問的屬性或者方法。

方法過載:

在進行方法的過載時,有四條基本原則需要遵守:

1、 方法名相同;

2、 引數列表必須不同;

3、 返回值可以不同;

4、 可以互相呼叫

方法的返回值不是方法的簽名的一部分,所以,進行方法的過載的時候,不能將返回值型別的不同當成兩個方法的區別。也就是說,在同一個類中,不能有這樣的兩個方法,它們的方法名相同、引數相同,只是方法的返回值型別不同。

構造器過載:

它沒有返回值,它的方法名稱必須和類的名稱一致。構造器可以進行過載。

This關鍵字:

Java中為解決變數的命名衝突和不確定性問題,引入關鍵字“this”代表其所在方法的當前物件:

1、 構造器中指該構造器所建立的新物件;

2、 方法中指呼叫該方法的物件;

3、 在類本身的方法或構造器中引用該類的例項變數和方法。

public class person{
	private String name;
	private String address;
	public preson(){

	};
	public preson(String name){
		this(); //呼叫構造器person();
		this.name = name;
	}
	public person(String name, String address){
		this(name);  //呼叫構造器person(String name);
		this.address = address;
	}
}

This只能用在構造器或者方法中,用於獲得呼叫當前的構造器、方法的物件引用。可以和任何的物件引用一樣來對處理這個this物件。在構造器中可以通過this()方式來呼叫其他的構造器,但在一個構造器中最多隻能呼叫一次其他的構造器。並且,對其他構造器的呼叫動作必須在構造器的起始處,否則編譯會出錯。不能在構造器以外的地方以這種方式呼叫構造器。

Static關鍵字:

在Java中,可以將一些成員限制為和類相關的,而不是和例項相關的。實現這個目的的方法是,在類的成員例如方法、屬性乃至自由程式碼塊前面加上static修飾符。

Static不可用於修飾構造器。

Final關鍵字:

在Java的類、方法和變數前面,可以加上final關鍵字。Final關鍵字表示它修飾的類、方法或變數不可被改變。Final類不可以被繼承,final變量表示該變數不可以被改變,就是常量。

Final方法表示這個方法不可以在子類中覆蓋。

public class A{
	public final void fun1(){

	}
}
public class B extends A{
	//此處報錯,因為它試圖覆蓋父類中的靜態方法
	public void fun1(){

	}
}
/*********************************/
public class A{
	private final void fun1(){

	}
}
public class B extends A{
	//此處不報錯,因為B無法訪問A中的fun1(),所以這裡只是新定義了一個fun1()
	public void fun1(){

	}
}

抽象類:

Abstract:抽象類裡面並非一定需要抽象方法,當定義了一個類但是又不想讓它被直接例項化的時候,可以使用抽象類的方法來實現。反之,如果類中有抽象方法,則一定要將類定義為抽象的類。

在以下任一條件成立時,類必須定義成抽象類:

1、 類中有至少一個抽象方法;

2、 類繼承了父類中的抽象方法,但是至少有一個抽象方法沒有實現;

3、 類實現了某個介面,但沒有全部實現介面中的方法。

介面:

介面是方法宣告和常量值的定義的集合。

在抽象類中,有些方法被實現,而有些方法只是方法的宣告,沒有方法的具體實現(抽象方法),而在介面中,所有的方法都沒有被實現。

介面和抽象類的區別:

1、和抽象類中的抽象方法不一樣,這些沒有被實現的方法不需要加上關鍵字abstract來將它宣告為抽象方法。

2、介面中所有成員屬性都會被自動加上publicstatic final來修飾,所有方法都會加上public來修飾。

3、介面的繼承也是使用extends關鍵字,介面的使用用implements。和類的繼承不同的是,在介面的繼承中可以繼承多個介面,只需要將繼承的各個介面用逗號隔開即可。

Java不支援多繼承,但是一個類可以實現多個介面,通過介面可以模擬實現多繼承。

多型:

在Java中,物件變數是多型的。一個型別為Aclass的變數既可以指向型別為Aclass的物件,也可以指向Aclass的任何子類物件。

多型帶來的一個明顯的好處是:以多型的形式來傳遞引數,增強了引數型別的靈活性。

Instanceof運算子:

<引用型別變數> instanceof<引用型別>

這是一個boolean型別的表示式,當instanceof左側的引用型別變數所引用物件的實際型別是其右側給出的型別或其子類型別時,整個表示式的結果為true,否則為false。

內部類:

內部類就是定義在一個類內部的類。

1、 內部類物件能訪問它所處類的私有資料;

2、 內部類能夠隱藏起來不為同一個包中的其他類訪問;

3、 匿名內部類可以方便地用在回撥方法中。


相關推薦

Java 面向物件知識小結

類的繼承: 在Java中,一個類只能從一個父類繼承,而不能從多個類中繼承。這種繼承方式稱為“單繼承”。 在Java中,如果你定義了一個類,這個類沒有繼承任何父類,那麼,系統會自動將這個類的父類設定為java.lang.Object,例如: public class Per

java面向物件知識小結

1.Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作2.子類可以寫父類的過載方法3.開閉原則是指一個軟體實體應該通過擴充套件來實現變化,而不是通過已有的程式碼來實現變化4.對於基本型別,final使數值恆定不變,而對於物件引用,final使引用恆定不變。一旦引用被初始化指向一個物

JAVA面向物件小結——理論問題

1、什麼是類和物件?什麼是面向物件程式設計? 2、區域性變數、例項變數和靜態變數(類變數)的定義?如何使用?區別? 3、過載(Overload)和重寫(Override)的區別? 4、封裝、繼承、多型的定義?作用?優缺點? 5、抽象類和介面的定義?區別?分別什麼時候使用? 6

Java面向物件的基本知識

歡迎來到Java的世界裡,這裡萬物皆物件。 一. 類與物件 剛開始接觸Java的時候,肯定會有同學會對類和物件兩個概念糾結很久,為什麼我會知道呢? 因為我就是其中一個。 下面我來介紹一下類和物件吧: 類是具有相同屬性和服務的一組物件的集合   物件是系統中用來描述客觀事物的

Java-面向物件基礎知識

1. 方法、引數 傳遞引數時通過值傳遞,就是傳遞實際引數的副本,並不會傳遞物件本身 傳遞物件例項的形式的引數時,會將形參的引用指向實參所指向的堆記憶體,修改形參會影響到實參的值,但不會影響實參本身 在傳遞引數的時候在最後一個形參型別後加…表

Java 面向物件基礎 以及進階知識 總結

Controlling Access to Members of a Class. private: 僅僅可以在自己的類中使用 public: 哪裡都可以用 protected: package-private 就是在同一個包下都可以使用,並且在別的包下繼承他的子類中也可以

如何講清楚 Java 面向物件的問題與知識?(類與物件,封裝,繼承,多型,介面,內部類...)

# 寫在最前面 這個專案是從20年末就立好的 flag,經過幾年的學習,回過頭再去看很多知識點又有新的理解。所以趁著找實習的準備,結合以前的學習儲備,建立一個主要針對應屆生和初學者的 Java 開源知識專案,專注 Java 後端面試題 + 解析 + 重點知識詳解 + 精選文章的開源專案,希望它能伴隨你我一直

java面向基本知識以及二維數組基本知識

繼承/多態/接口/抽象類 代碼塊 形式參數與返回值關系 內部類 二維數組 一、二維數組 1、定義方式m:代表當前二維數組中有多少個一維數組;n:代表每個一維數組的長度(1)數據類型[][] 數組名=new 數據類型[m][n](2)數據類型[][] 數組名=new 數據類型[m][ ],只

Java 面向物件 --多型性

1,方法的過載和重寫; 2,可以用父類的引用指向子類的具體實現,而且可以隨時更換為其他子類的具體實現; 父類Animal: package com.java1234.chap03.sec13; public class Animal { public void say(){

3.Java面向物件程式設計OOA/OOP/OOD/OOAD()/UML類圖、函數語言程式設計Scala(JVM)---類與物件、封裝繼承多型、構造方法、覆寫/重寫/override

一、緒論 1.面向物件程式設計正規化(C++、Java、Go)------能進行現實生活的抽象。             每個物件都是一個類。類中包含屬性與方法。 OOA:面向物件分析 OOP:面向物件程式設計

JAVA面向物件學習筆記(1)

1.Static關鍵字   特點: 1.一個類的多個物件共享,節省資源空間                2.隨著類的載入而載入         &nbs

Java面向物件的理解

一、封裝 定義: 就是資訊隱藏,是指利用抽象資料型別將資料和基於資料的操作封裝在一起,使其構成一個不可分割的獨立實體,資料被保護在抽象資料型別的內部,儘可能地隱藏內部的細節,只保留一些對外介面使之與外部發生聯絡。 使用封裝有三大好處: 1、良好的封裝能夠減少耦合。 2、類內部的結

JAVA面向物件程式設計之購物車介面的設計與功能的實現

1、小組成員及分工 小組成員 負責工作 蘭澤祥 負責總體介面、Git程式碼庫 吳修恩 負責MVC模式、類名包名的規範化 2、Git 倉庫地址 倉庫地址:https://gitee

04-java面向物件

java面向物件   面向過程開發:   其實就是面向具體的每一個步驟和過程,把每一個步驟和過程完成,然後有這些功能方法相互呼叫,完成需求   代表語言:C語言 面向物件是基於面向過程的程式設計思想   面向過程:強調的是每一個功能的步驟   面向物件:強調的是物件,然後由物件去呼叫功

Java面向物件和方法

Java 方法 那麼什麼是方法呢? Java方法是語句的集合,它們在一起執行一個功能。 方法是解決一類問題的步驟的有序組合 方法包含於類或物件中 方法在程式中被建立,在其他地方被引用 方法的優點 1. 使程式變得更簡

07.Java面向物件——成員內部類

一、內部類訪問外部內:即class中的class訪問它外面的class (暈了吧,看圖片) 《Java基礎案例教程》黑馬程式設計師/編著————書的106頁  二、外部類訪問內部類 //主函式內 Outer.Inner inner = new Outer().n

06.Java面向物件——static關鍵字

一、關於new 在定義一個類時,只是在描述某類事物的特徵和行為,並沒有產生具體的資料。只有通過new關鍵字建立該類的例項物件後,系統才會為每個物件分配空間,儲存各自的資料。 二、靜態變數 static只能修飾成員變數,不能修飾區域性變數 class Student { static

05.Java面向物件——this關鍵字

舉個栗子: class Person { String name; int age; public Person(String con_name, int con_age) { name = con_name; // 為name屬性賦值 age = con_age; // 為age

Java面向物件模板方法(溫習final、abstract)

 /*  * 當代碼完成優化後,就可以解決這類問題  * 這種方式就是模板方法:  *     在定義功能時,功能一部分是確定的,但有一部分是不確定的,而確定的部分在使用不確定的部分,  * 那麼這時就將不確定的部分

java 面向物件

static修飾的成員不能直接訪問沒有static修飾的成員 有static修飾的成員屬於類本身,沒有static修飾的成員屬於該類的例項 static修飾的方法和成員變數既可以通過類來呼叫,也可以通過例項來呼叫。沒有static修飾,只能通過例項來呼叫。   構造器不能定