1. 構(gòu)造方法
構(gòu)造方法:方法名字必須與類名保持一致,方法不能有返回值類型的描述。如果一個類中,沒有聲明任何顯式的構(gòu)造方法,系統(tǒng)會提供一個默認(rèn)的無參數(shù)的構(gòu)造方法。如果一個類中顯式的聲明了構(gòu)造方法,系統(tǒng)不再提供默認(rèn)的無參構(gòu)造方法。
public 類名(參數(shù)列表){
}
構(gòu)造方法是在創(chuàng)建對象時完成調(diào)用,主要的任務(wù)是對對象中的內(nèi)容進(jìn)行初始化

構(gòu)造方法就是在一開始就調(diào)用,同時完成類中屬性值的初始化賦值操作。
如果出現(xiàn)構(gòu)造方法的形參名字與類的屬性的名字一樣,需要借助this關(guān)鍵字來區(qū)分。this.sno表示的是屬性,sno表示的局部變量(形參或聲明的普通變量)
public class Student {
int sno; //學(xué)號
String sname; //姓名
public Student(int sno, String sname) {
this.sno = sno;
this.sname = sname;
}
}
this關(guān)鍵字:表示類當(dāng)前的引用對象
2. 繼承(extends)
2.1 繼承的理解
Java中的繼承不同于現(xiàn)實(shí)意義中的繼承,它表示擴(kuò)展的概念。
體現(xiàn)了現(xiàn)實(shí)世界中,事物之間一般類與特殊類之間的關(guān)系。
可以理解:一般的概念包含特殊的概念。判斷這個關(guān)系時使用ISA原則
B is a A(B是一種A)這句話成立 B是特殊,A是一般
X is a Y(X是一種Y)這句話不成立 不能判定兩者的關(guān)系
比如:
- "燕子是一種鳥"這句話成立。燕子是特殊,鳥是一般。屬于繼承關(guān)系
- "班長是一種狗"這句話不成立。 班長和狗沒有任何關(guān)系。
在Java中想使用繼承關(guān)系,必須首先滿足ISA原則。
特殊類(子類)擁有一般類(父類或超類)的屬性和行為
編程實(shí)現(xiàn):
public class B extends A{
}
B擁有A的屬性和行為,同時B可以擴(kuò)展出自己特有的屬性和行為
2.2 繼承的實(shí)例
以鳥類和燕子類為例,寫出一個實(shí)例,鳥類可以吃但不一定會飛。燕子是一種鳥而且會飛
鳥類
public class Bird {
String name; //名字
String color; //顏色
public void eat() {
System.out.println(name+"正在吃東西");
}
}
燕子類
public class Swallow extends Bird {
public void fly() {
System.out.println(name+"正在飛翔");
}
}
測試類
public class Test {
public static void main(String[] args) {
Bird b = new Bird();
b.name = "鳥";
b.color = "白";
b.eat();
System.out.println("=============================");
Swallow s = new Swallow();
s.name = "燕子";
s.color = "黑";
s.eat();
s.fly();
}
}
2.3 Java中單繼承的特點(diǎn)
Java中繼承的特點(diǎn)
- 一個類只能有一個直接的父類,這個被稱為單繼承。
- 一個類如果作為父類,子類的數(shù)量是沒有限制的
- 如果一個類沒有寫明顯式的父類,默認(rèn)繼承java.lang.Object類
以類圖體現(xiàn)2.2小節(jié)中的例子

2.4 子類構(gòu)造方法的特點(diǎn)
子類調(diào)用父類構(gòu)造方法時有下面三種情況
- 父類和子類都沒有顯式地聲明構(gòu)造方法是OK的
- 父類沒有顯式地聲明構(gòu)造方法,子類顯式地聲明了構(gòu)造方法是OK的
- 父類顯式地聲明構(gòu)造方法,子類必須顯式地聲明構(gòu)造方法
總結(jié)起來
子類必須在構(gòu)造方法的第一句代碼調(diào)用父類的構(gòu)造方法,如果父類有默認(rèn)的無參構(gòu)造方法,子類這句調(diào)用可以省略(實(shí)際上是默認(rèn)調(diào)用)
調(diào)用父類構(gòu)造方法的語法是:
super(參數(shù)列表);
- super關(guān)鍵字
表示繼承自父類的內(nèi)容(屬性,方法,構(gòu)造方法)
屬性: super.xxx
方法:super.xxx();
構(gòu)造:super();
- this關(guān)鍵字
表示調(diào)用自身的內(nèi)容(屬性,方法,構(gòu)造方法)
屬性:this.xxx
方法:this.xxx();
構(gòu)造:this();
一般情況下,this都被省略

3. 封裝
對于類的封裝,即隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”。其中數(shù)據(jù)和函數(shù)都是類的成員。
對于包的封裝,對于實(shí)現(xiàn)同樣業(yè)務(wù)邏輯或者實(shí)現(xiàn)類似功能的類,將其放入到同一個package(類似于文件夾)中,形成模塊。
3.1 包的概念
包是一種類似于文件夾的層次結(jié)構(gòu),方便同類Java文件進(jìn)行整理或者管理。
聲明一個類,需要在類的上方聲明package表示該類放在哪個包中
對于下方示例1的分析
- 聲明Test1類所在的包是:package com.neuedu.test4;
- 聲明引入了java.util包下的所有類: import java.util.*
- 聲明引入了com.neuedu.test1包下的Student類
- System類和Object類都處于java.lang包,默認(rèn)java.lang包無需引包。
示例1:包的聲明和引入
package com.neuedu.test4;
import java.util.*;
import com.neuedu.test1.Student;
public class Test1 {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
Student s1 = new Student(101, "");
System.out.println(s1);
Object o = new Object();
}
}
系統(tǒng)中常見預(yù)設(shè)的包
- java.lang包:系統(tǒng)中常用類,這個包無需引包即可使用
- java.util包: 工具性質(zhì)的類,提供了各種方便的功能
- java.io包: 內(nèi)容(流)的輸入輸出及文件的操作
- java.sql包:與數(shù)據(jù)庫交互的類
- java.net包:與網(wǎng)絡(luò)操作相關(guān)的類
- java.awt包和java.swing包:與圖形界面相關(guān)的類
3.2 訪問權(quán)限
Java中有兩種訪問權(quán)限,控制類的可見范圍"默認(rèn)"和“public公有”
Java中有四種訪問權(quán)限,控制屬性和方法的可見范圍。
| 權(quán)限 | 類的內(nèi)部 | 同一包中 | 不同包的子類中 | 不同包的類中 |
|---|---|---|---|---|
| private(私有) | √ | x | x | x |
| 什么都不寫(默認(rèn)) | √ | √ | x | x |
| protected(保護(hù)) | √ | √ | √ | x |
| public(公有) | √ | √ | √ | √ |




筆試題:Test類中某個屬性需要被它的子類訪問,這個屬性的訪問權(quán)限至少應(yīng)該設(shè)置為什么? 答案:protected
3.3 訪問器
也被稱為“set方法和get方法”或者“setter和getter”
主要用于私有屬性的訪問:
- 為私有屬性設(shè)置公有g(shù)et方法,外界就可以看到私有屬性。
將屬性名作為方法名,首字母大寫后,前面加上get
比如:屬性name的get方法:getName
public int getSno() {
return this.sno;
}
- 為私有屬性設(shè)置公有set方法,外界就可以更改私有屬性。
將屬性名作為方法名,首字母大寫后,前面加上set
比如:屬性name的set方法:setName
public void setSno(int sno) {
this.sno = sno;
}
一般通過右鍵代碼空白處,"source"->"Generate Getters and Setters"
set和get的主要存在意義
- 可以提供“半權(quán)限”,比如某個屬性只能看不能改。
- 框架底層實(shí)現(xiàn),要求屬性必須有set和get方法。