黑馬程式設計師——物件導向(上)— 類、物件、封裝、繼承、構造方法
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------
1.物件導向的核心思想
Java中只有值傳遞,基本型別傳遞的是實際的數值,引用資料型別傳遞的是地址值。
基本型別:形式引數的改變不會影響實際引數.
引用型別:形式引數的改變會直接影響實際引數,因為引用資料型別傳遞的是地址值.(String型別除外)
(2)理解程式導向和麵向物件
程式導向:是以函式為基礎,強調的是過程。(強調的是這個方法可以實現什麼功能)
物件導向:是以物件為基礎的,它強調的是這個物件可以完成什麼功能
(3)物件導向的思想特點
A:更符合人們的思考習慣的思想(能懶就懶)
B:把複雜的事情簡單化
C:讓程式設計師從執行者變為了指揮者
(4)面試:跟我談談什麼是物件導向
A 物件導向是基於程式導向的
B 告訴他什麼是程式導向什麼是物件導向
C 在說物件導向的思想特點
D 舉例說明(要求每人想一個)
2、類與物件的關係概述
(1)開發的過程:
就是不斷的建立物件,指揮物件去做事情(物件呼叫方法)
(2)類與物件
類:屬性和行為的集合,它是一個抽象的概念
物件:就是類的具體實現,體現.
成員變數:其實就是屬性
成員方法:其實就是行為
(3)定義一個類的步驟
A、分析這個實物有什麼屬性及行為
B、把這個事物的屬性定義為成員變數(把變數定義在類中方法外)
C、把這個實物的行為定義為成員方法(把之前函式中的static去掉)
注意:
只有能用於描述這個類屬性的才可以定義為成員變數,其他情況全部定義為區域性變數
(4)成員變數與區域性變數的區別
成員變數:
A定義在類中方法外
B是有預設初始化值的(String null, int 0)
C儲存在堆記憶體中(因為它是隨著物件的存在而存在)
區域性變數:
A 定義在方法中,或形式引數位置
B 是沒有預設初始化值的(必須先賦值再使用)
C 儲存在棧記憶體中的(它是依託於方法而存在的,方法呼叫完畢就消失。)
(5)匿名物件
使用情況:
A 當物件之使用一次時。
B 可以當實際引數使用。
案例:
class Student
{
public void show()
{
System.out.println("student -- show");
}
}
class Test
{
//引用型別作為形式引數
public static void print(Student s)
{
s.show();
}
public void print(int a)
{
System.out.println(a);
}
}
class NiMingTest
{
public static void main(String[] args)
{
//如何使用show()方法呢?
Student s = new Student();
//匿名物件的使用
Test.print(new Student());
Test t = new Test();
}
}
(1) 定義
隱藏物件的屬性和細節,僅對外提供公共訪問方式。(換句話說就是將屬性私有化,並提供共有的方法訪問)
注意:
對外提供訪問方式是因為可以在訪問方式中加入邏輯判斷的語句。提高程式碼的健壯性。
(2)好處:
A、將變化隔離。
B、便於使用
C、提高重用性
D、提高安全性
(3) private關鍵字
A. 他是一個訪問許可權修飾符。
B.可用於修飾成員內容,包括成員變數和成員方法
C.被private修飾的內容只能在本類中使用
注意:
private僅僅是封裝的一種體現,因為類,函式等其實也是一個封裝的體現
C.set方法和get方法的名字可以隨便起,這樣起名只不過是形成的一個預設的規則
(2) 作用
給物件進行屬性初始化(給類中的成員初始化)
(3) 注意事項
C、構造方法的過載體現在引數列表不同
D、構造方法的過載與方法的過載沒有關係,即使構造方法名和普通方法名一樣,他們也不存在過載關係。
注意:
Set方法存在就是為了個成員變數賦值。
構造方法主要目的是初始化物件(捎帶賦值),只能賦值一次
(5)建構函式與一般函式的區別
構造方法是在物件一建立就執行,給物件初始化,且只執行一次。
一般方法是物件呼叫才執行,給物件新增功能,可以呼叫多次。
案例:
class Person
{
private String name;
private int age;
//構造方法
public Person()
{
//System.out.println("無參構造方法");
}
public Person(String n)
{
name = n;
}
/*
這不是構造方法
public void Person()
{
System.out.println("haha");
}
*/
}
5、this關鍵字
(1)概念
(2) 應用場景
用於解決區域性變數隱藏成員變數的問題
簡單點說:通過this關鍵字可以直接呼叫成員變數
Public boolean compare(Person p)
{
Return this.age == p.age;
}
(3)使用案例:
public class Student {
private String name;
private int age;
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;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
}
6、程式碼塊(用的很少,主要應對面試)
(1)概述
由{}擴起來的程式碼稱之為程式碼塊,類或者方法也可認為是程式碼塊,但是一般不這麼說,我們平時所說的程式碼塊指的是孤零零的{}
(2)程式碼塊作用
A、區域性程式碼塊作用
讓變數儘可能早的從記憶體中消失,提高記憶體利用率
B、構造程式碼塊作用是
把所有構造方法中的共同的內容定義在構造程式碼塊中,提高程式碼複用性,程式碼塊先於構造方法執行,但是一般不用
7、static關鍵字
(1)概述
A static可以修飾成員變數和成員方法
B 被static修飾的成員可以被該類下所有的物件共享
(2)什麼時候用靜態
A.如果該屬性是被該類下所有的物件所共享時就用static修飾
B.如果方法內部只訪問靜態資料時,那麼該方法可以定義為靜態的。
注意:
類中所有方法都靜態後,可以直接呼叫,但是該類還是可以被其他程式建立物件,為了更為嚴謹,可以通過將構造方法私有化,強制讓該類不能建立物件。
(3)特點
C、可以直接通過類名呼叫
D、被該類下所有物件共享
8、繼承
(1)什麼是繼承
A、多個類中存在相同屬性和行為時,將這些內容抽取到單個類中,那麼多個類無需在定義屬性和行為,只需要繼承即可
B、多個類稱為 子類或派生類, 單個類稱為父類或者超類
C、通過extends關鍵字讓他們產生關係
(2)繼承的好處及特點
9、this 和super比較
(1)概念上的區別
super代表的是父類記憶體空間標識
this代表的是本類物件的引用
(3)呼叫方式
A、super:
呼叫構造方法:super()
呼叫成員變數:super.變數名
呼叫成員方法:super.方法名()
B、this:
呼叫構造方法:this()
呼叫成員變數:this.變數名
呼叫成員方法:this.方法名()
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------
相關文章
- go物件導向思想:封裝、繼承、多肽Go物件封裝繼承
- JS物件導向程式設計(四):繼承JS物件程式設計繼承
- java-物件導向程式設計--繼承Java物件程式設計繼承
- ~~核心程式設計(五):物件導向——多繼承~~程式設計物件繼承
- js:物件導向程式設計,帶你認識封裝、繼承和多型JS物件程式設計封裝繼承多型
- 物件導向三大特性-----封裝、繼承、多型物件封裝繼承多型
- 物件導向三大特徵(封裝/繼承/多型)物件特徵封裝繼承多型
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- 物件導向:繼承物件繼承
- 物件導向--繼承物件繼承
- 物件導向-繼承物件繼承
- Kotlin 物件導向程式設計 (OOP) 基礎:類、物件與繼承詳解Kotlin物件程式設計OOP繼承
- [.net 物件導向程式設計基礎] (12) 物件導向三大特性——繼承物件程式設計繼承
- 理解Js中物件導向程式設計的繼承JS物件程式設計繼承
- javascript物件導向程式設計的建構函式的繼承JavaScript物件程式設計函式繼承
- Javascript物件導向程式設計(二):建構函式的繼承JavaScript物件程式設計函式繼承
- Javascript 物件導向程式設計(一):封裝JavaScript物件程式設計封裝
- Golang物件導向程式設計之繼承&虛基類【組合&介面】Golang物件程式設計繼承
- Golang物件導向_繼承Golang物件繼承
- java物件導向繼承Java物件繼承
- 物件導向之繼承物件繼承
- php物件導向--繼承PHP物件繼承
- Go語言結構體(struct)物件導向程式設計進階篇(封裝,繼承和多型)Go結構體Struct物件程式設計封裝繼承多型
- javascript物件導向程式設計的非建構函式的繼承JavaScript物件程式設計函式繼承
- Javascript物件導向程式設計(三):非建構函式的繼承JavaScript物件程式設計函式繼承
- [JAVA] Java物件導向三大特徵:封裝、繼承、多型Java物件特徵封裝繼承多型
- 黑馬程式設計師Java培訓和Android培訓:物件導向程式設計師JavaAndroid物件
- JS的物件導向(理解物件,原型,原型鏈,繼承,類)JS物件原型繼承
- [.net 物件導向程式設計基礎] (11) 物件導向三大特性——封裝物件程式設計封裝
- 物件導向之_繼承概念物件繼承
- Javascript物件導向與繼承JavaScript物件繼承
- Python - 物件導向程式設計 - 三大特性之繼承Python物件程式設計繼承
- JS物件導向:JS繼承方法總結JS物件繼承
- 物件導向的三個基本特徵是:封裝、繼承、多型物件特徵封裝繼承多型
- 物件導向程式設計(C++篇2)——構造物件程式設計C++
- Javascript實現物件導向繼承JavaScript物件繼承
- 21. 物件導向之繼承物件繼承
- java核心思想物件導向三大特性(封裝,繼承,多型)Java物件封裝繼承多型