【JAVA】基礎:面向物件:(抽象、封裝、繼承、多型)、方法重寫、訪問修飾符、關鍵字(this,super,static,final)、抽象、介面
面向物件概念:
面向過程:完成一件事情任何過程自己親力親為。
面向物件:找能完成這件事的物件。在java中就是找物件,調方法。
面向物件特徵:抽象,封裝,繼承,多型
類和物件的關係:
類:生活中事物的統稱,如動物,車,服裝,食品…
物件:就是類下面實實在在存在的個體,如動物類的物件就是:貓,狗,牛,羊…
萬事萬物皆物件。
類是物件模板,物件是類下面其中一個真實存在的個體。
抽象:
找出一些事物的相似和共性之處,把現實生活中的物件,抽象為類。
屬性對應類中變數,行為對應類中方法。
package com.test.demo; public class Car { /* * 描述顏色 * 1.public 許可權修飾符,公開的,所有都能訪問 * 2.屬性可以在這裡賦值,也可以不賦值,等建立物件後用物件名.屬性名賦值 * 如:Car car=new Car(); car.color="紅色"; * 也可以用匿名物件類簡寫 * 如:new Car().color="紅色"; */ public String color = "紅色"; /* * 描述輪胎數 * private 許可權修飾符,私有的,封裝就是用這個關鍵字。 * 需要提供對外訪問的方法才能訪問 get:獲取值 set:賦值 */ private int num = 4; public int getNum() {//獲取值的方法 return num; } public void setNum(int num) {//賦值的方法 this.num = num; } // 行為 public void run() { System.out.println("跑"); } // 無參構造器 public Car() { } // 有參構造器 建立時呼叫這個構造器可直接賦值 如:Car car=new Car("紅色",4); public Car(String color, int num) { super(); this.color = color; this.num = num; } }
成員變數和區域性變數、全域性變數:
成員變數:類的屬性,作用於整個類中。在堆記憶體中,因物件存在才在記憶體中存在。
區域性變數:作用於函式中或者語句中。存在棧記憶體中。
全域性變數:整個程式。
棧:區域性變數,也就是方法裡的基本資料型別。
堆:new 出來的資料。複雜的基本型別,就是物件。
封裝:
屬性私有化,不讓外部訪問,再提供公開的方法來訪問我們的私有屬性。
用paivate關鍵字修飾屬性,再提供set get方法賦值或取值。
/* * 描述輪胎數 * private 許可權修飾符,私有的,封裝就是用這個關鍵字。 * 需要提供對外訪問的方法才能訪問 get:獲取值 set:賦值 */ private int num = 4; public int getNum() {//獲取值的方法 return num; } public void setNum(int num) {//賦值的方法 this.num = num; }
繼承:
所謂的繼承本質就是程式碼的拷貝,通過關鍵字extends來實現。java的所有類預設繼承自Object類。
還是剛才的例子,Benz繼承自Car類後,裡面就有了父類的屬性和方法。
多型:
一種物件有多種形態,父類物件存放子類資料。
父類引用指向指向子類物件。
( 重寫,過載都屬於多型)
注意:資料型別轉換,大轉小需要強制轉換。
如:double變int,double num2; int num=(int)num2;
方法的重寫:
必須是有繼承關係,子類覺得父類的某一個方法不好,把他的方法體進行了重新編寫程式碼,也叫方法的複寫,方法的覆蓋。
注意:重寫,方法名,返回值型別,引數都必須一樣,只有方法裡的程式碼不一樣。
訪問修飾符:
規定我們的類、方法、屬性的訪問許可權的關鍵字。
修飾符 | 訪問級別 | 作用域 |
---|---|---|
public | 公開的 | 就是所有類都可以訪問 |
private | 私有的 | 只有自己可以訪問 |
protected | 受保護的 | 同包可以訪問,當前類,子類可以訪問 |
default、friendly | 預設的 | 同包,同類可以訪問 |
關鍵字:
關鍵字 | 作用 |
---|---|
this | 指代當前物件的引用 |
super | 指代當前物件父類的引用 |
static | 靜態的,可修飾程式碼塊、方法、屬性 。一般staitc的屬性或者方法都是public的。只要是static修飾的屬性和方法,就一定會先分配記憶體空間。staitc方法的呼叫方式就是類名.方法名();static修飾的屬性和方法永遠只有獨一份,和物件無關。static叫做類資料,和物件無關。 非static叫物件,和類無關。 非靜態方法可以訪問靜態變數和非靜態變數 。靜態方法不能出現this關鍵,靜態方法載入在建立物件之前靜態方法就不能訪問非靜態變數。 |
final | 永久的,長久的,可以修飾類,方法,屬性。1.修飾類,表示類不能被繼承。2.修飾方法:表示方法不能被重寫。3.修飾變數,表示值不能被修改,就是常量的意思 |
抽象(方法,類): 用 abstract修飾
抽象方法:
訪問修飾符 abstract 返回值 方法名(引數。。。。); 一定不能有方法體
抽象類:
public abstract class 類名{ }
注意:抽象方法必須存在於抽象類裡面;子類必須重寫父類的抽象方法。
介面:
介面就是一個高階的抽象類, 裡面只可以寫抽象方法。
介面的屬性預設是public final的
介面的方法預設是public abstract
介面就是給他的子類定義了一個方法的模板,介面是一定需要實現的(用關鍵字implements),不實現,介面不具備任何意義。
普通類是可以建立物件的, 抽象類和介面是不能建立物件,也就是不能new它。只能new介面的實現類,這也是多型的體現。
補充:
載入順序:
父類靜態程式碼塊,父類靜態變數,父類靜態方法, 子類靜態程式碼塊 ,子類靜態變數,子類靜態方法
父類程式碼塊,父類構造器 子類程式碼塊,子類構造器