1. 程式人生 > >【JAVA】基礎:面向物件:(抽象、封裝、繼承、多型)、方法重寫、訪問修飾符、關鍵字(this,super,static,final)、抽象、介面

【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介面的實現類,這也是多型的體現。

補充:
載入順序:
父類靜態程式碼塊,父類靜態變數,父類靜態方法, 子類靜態程式碼塊 ,子類靜態變數,子類靜態方法

父類程式碼塊,父類構造器 子類程式碼塊,子類構造器