1. 程式人生 > 實用技巧 >面向物件(二)

面向物件(二)

1.類中的構造器

初始化物件的過程:

1)JVM會檢查類是否被載入,如果沒有,則載入類的位元組碼到方法區(有且載入一次);

2)在堆上開闢一塊區域,建立物件

3)初始化物件,給物件賦予初始值

4)呼叫構造器重新賦值

構造器

系統預設分配無參構造器,如果手動設定有參構造器,需要同時設定無參構造器(系統不會再預設設定);

構造器名稱與類名一直,無方法返回值,無return返回值

2.類中的關鍵字:static,final

static

1)修飾成員變數,變成類變數,可以 類名.變數名問。

2)修飾方法,變成靜態方法,可以類名.方法名問。

可以修飾程式碼塊,變成靜態塊,通常用來初始化資料庫連線,初始化工廠。

靜態方法和靜態塊,不能訪問非靜態的成員變數和方法。這是由載入順序決定的。

類中程式碼塊包含有(普通塊,靜態塊,構造塊),載入的順序是 靜態塊>構造塊>構造器>普通塊

3)修飾類,可以變成內部類

被static修飾後,會在類第一次載入時,載入到方法區中。

final

1)修飾成員變數,變成常量,不可修改

2)修飾方法,變成不能重新的方法

3)修飾類,變成不可繼承的類

應用案例:Math類,常量類,內部是靜態方法,不能重寫方法,不能初始化,直接呼叫定義好的方法,防止方法被篡改

3.繼承中的關鍵字:extends,super,this

extends表示繼承,只能繼承一個類。

super()可以用來呼叫父類的構造方法,super.xxx可以用來呼叫父類的屬性和方法

this表示當前類,用於區分形參和成員變數,防止初始化時,採用了就近原則

4.抽象與介面

繼承是對類程式碼的複用,體現的是is-a的關係

抽象是對類的一種提煉,體現的是對方法不滿意,需要重寫。

 1 public abstract class TestAbs
 2 {
 3    /*
 4    1.抽象類有構造器,可以被例項化
 5     */
 6     private String name;//姓名
 7 
 8     /*
 9     2.只要有一個方法被abstract修飾,此類即為抽象類;抽象類允許有其他屬性和方法
10 */ 11 public abstract void test(); 12 13 /* 14 3.抽象類不能被final修飾,因為抽象類一定會被繼承 15 */ 16 17 public String getName() 18 { 19 return this.name; 20 } 21 }

介面是對類設定標準,體現的是has-a的關係

 1 public interface ITest
 2 {
 3      /*
 4      1.介面沒有構造器,不能例項化
 5      2.public static final 公共的靜態的常量
 6      可以省略,但是不建議省略
 7       */
 8      public static final  double PI = 3.14;
 9 
10      /*
11      3.public abstract 公共的抽象的方法
12       */
13      public abstract void test();
14 
15     /*
16      4.先繼承,再實現,繼承只能繼承1個,實現可以實現多個
17      */
18 
19     /*
20     5.JDK1.8後的新特性
21     1)可以定義預設方法,解決介面升級問題;
22     例如:介面需要新增一個方法,但是實現類比較多,可以新增一個預設方法,實現類使用預設方法即可。
23     如果實現類想重新新增方法,也是允許的。如果實現類想重新的同時,還呼叫父類的方法,
24     介面.super().方法名
25      */
26 
27      default void test2()
28     {
29 
30     }
31 
32     /*
33     5.JDK1.8後的新特性
34     2)可以定義靜態方法,靜態方法不能重寫
35      */
36     public static void test3()
37     {
38 
39     }
40 }

5.多型的應用場景

父類或者介面作為引數或者返回值型別,實際作為引數或返回值的繼承或實現的子類。

比如簡單工廠模式,根據傳入引數,返回不同型別的子類。

向上轉型(p只能看到p和stu共同擁有的屬性和方法,方法還是stu重寫的方法)

Student stu = new Student();

Person p = stu;

向下轉型

Student stu = (Student) p;

6.類與類之間的關係

1)繼承

2)實現

3)依賴

方法中呼叫了其他類,比如:人過河,需要小船;依賴性沒有那麼強

4)關聯

方法中的成員變數是其他類,比如:老師和學生,學生和朋友

5)聚合

多個類聚合成某個群體,比如家人和家

6)組成

某個部分,不可缺失,比如大腦和人