看慕課網(wǎng)Java第二季整理
訪問修飾符
訪問修飾符 | 本類 | 同包 | 子類 | 其他 |
---|---|---|---|---|
private | √ | |||
默認(rèn) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
this
this關(guān)鍵字代表當(dāng)前對象
this.屬性 操作當(dāng)前對象的屬性
this.方法 操作當(dāng)前對象的方法
final
"最終的"
可以修飾類崭孤、方法胀溺、屬性厘唾、變量
- 修飾類,則該類不允許被繼承
- 修飾方法鹃操,則該方法不允許被覆蓋(重寫)
- 修飾屬性韭寸,則該類的屬性不會進行飲食的初始化,類的初始化屬性必須有值荆隘,或在構(gòu)造方法中賦值恩伺。(只能選擇其一)
- 修飾變量,則該變量的值只能賦一次值為椰拒,即變?yōu)槌A?/li>
super
在對象的內(nèi)部使用晶渠,可以代表父類對象
- 訪問父類的屬性:super.屬性名 如
super.age
- 訪問父類的方法:super.方法名 如
super.eat()
- 如果子類的構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法
- 如果顯式的調(diào)用構(gòu)造方法燃观,必須在子類的構(gòu)造方法的第一行褒脯。
- 如果子類構(gòu)造方法中既沒有顯式調(diào)用父類的構(gòu)造方法,而父類有沒有無參的構(gòu)造方法缆毁,則編譯出錯番川。
內(nèi)部類
內(nèi)部類( Inner Class )就是定義在另外一個類里面的類。與之對應(yīng),包含內(nèi)部類的類被稱為外部類颁督。
內(nèi)部類的主要作用如下:
內(nèi)部類提供了更好的封裝践啄,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類
內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù)沉御,包括私有的數(shù)據(jù)
內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)屿讽,只是有時使用內(nèi)部類更方便
分類
- 成員內(nèi)部類
- 靜態(tài)內(nèi)部類
- 方法內(nèi)部類
- 匿名內(nèi)部類
成員內(nèi)部類
【示例】
//外部類HelloWorld
public class HelloWorld{
//外部類的私有屬性name
private String name = "imooc";
//外部類的成員屬性
int age = 20;
//成員內(nèi)部類Inner
public class Inner {
String name = "愛慕課";
//內(nèi)部類中的方法
public void show() {
System.out.println("外部類中的name:" + HelloWorld.this.name);
System.out.println("內(nèi)部類中的name:" + name );
System.out.println("外部類中的age:" + age);
}
}
//測試成員內(nèi)部類
public static void main(String[] args) {
//創(chuàng)建外部類的對象
HelloWorld o = new HelloWorld ();
//創(chuàng)建內(nèi)部類的對象
Inner inn = o.new Inner();
//調(diào)用內(nèi)部類對象的show方法
inn.show();
}
}
靜態(tài)內(nèi)部類
【示例】
//外部類
public class HelloWorld {
// 外部類中的靜態(tài)變量score
private static int score = 84;
// 創(chuàng)建靜態(tài)內(nèi)部類
public static class SInner {
// 內(nèi)部類中的變量score
int score = 91;
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score );
System.out.println("訪問內(nèi)部類中的score:" + score);
}
}
// 測試靜態(tài)內(nèi)部類
public static void main(String[] args) {
// 直接創(chuàng)建內(nèi)部類的對象
SInner si = new SInner();
// 調(diào)用show方法
si.show();
}
}
方法內(nèi)部類
方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中伐谈,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用硫痰。
注意:由于方法內(nèi)部類不能在外部類的方法以外的地方使用衩婚,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符窜护。
【示例】
//外部類
public class HelloWorld {
private String name = "愛慕課";
// 外部類中的show方法
public void show() {
// 定義方法內(nèi)部類
class MInner {
int score = 83;
public int getScore() {
return score + 10;
}
}
// 創(chuàng)建方法內(nèi)部類的對象
MInner mi = new MInner();
// 調(diào)用內(nèi)部類的方法
int newScore = mi.getScore();
System.out.println("姓名:" + name + "\n加分后的成績:" + newScore);
}
// 測試方法內(nèi)部類
public static void main(String[] args) {
// 創(chuàng)建外部類的對象
HelloWorld mo = new HelloWorld();
// 調(diào)用外部類的方法
mo.show();
}
}
抽象類
使用abstract關(guān)鍵字修飾的類為抽象類效斑。
應(yīng)用場景
- 父類只知道子類應(yīng)該包含怎樣的方法,但無法準(zhǔn)確知道這些子類如何實現(xiàn)這些方法柱徙。
- 從多個具有相同特征的類中抽象出一個抽象類缓屠,以這個抽象類作為子類的模板,從而避免了子類設(shè)計的隨意性
作用
限制規(guī)定子類必須實現(xiàn)某些方法护侮,但不關(guān)注實現(xiàn)細(xì)節(jié)
使用規(guī)則
- abstract定義抽象類
- abstract定義抽象方法敌完,只有聲明,不需要實現(xiàn)
- 包含抽象方法的類是抽象類
- 抽象類中可以包含普通的方法羊初,也可以沒有抽象方法
- 抽象類不能直接創(chuàng)建滨溉,可以定義引用變量
【示例】
public abstract class Telephone{
public abstract void call();
public abstract void message();
}
public class Cellphone extends Telphone{
@Override
public void call(){
System.out.println("通過鍵盤打電話");
}
@Override
public void message(){
System.out.println("通過鍵盤發(fā)短信");
}
}
public class Smartphone extends Telphone{
@Override
public void call(){
System.out.println("通過語音打電話");
}
@Override
public void message(){
System.out.println("通過語音發(fā)短信");
}
}
封裝
將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問长赞,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問晦攒。
繼承
- 先初始化父類再初始化子類
- 先執(zhí)行初始化對象中屬性,再執(zhí)行構(gòu)造方法中的初始化
多態(tài)
引用多態(tài)
- 父類的引用可以指向本類的對象得哆。
- 父類的引用可以指向子類的對象脯颜。
方法多態(tài)
- 創(chuàng)建本類對象時,調(diào)用的方法為本類方法
- 創(chuàng)建子類對象時贩据,調(diào)用的方法為本類重寫的方法或者繼承的方法
引用類型轉(zhuǎn)換
- 向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換)栋操,是小類型到大類型的轉(zhuǎn)換
- 向下類型轉(zhuǎn)換(強制類型轉(zhuǎn)換),是大類型到小類型
- instanceof運算符饱亮,來解決引用對象的類型矾芙,避免類型轉(zhuǎn)換的安全性問題
【instanceof 示例】
//Dog,Cat類繼承Animal類
Dog dog=new Dog();
Animal animal=dog;//向上類型轉(zhuǎn)換 自動類型轉(zhuǎn)換
if(animal instanceof Dog){
Dog dog2=(Dog)animal;
}else{
System.out.println("無法進行類型轉(zhuǎn)換 Dog");
}
if(animal instanceof Cat){
Cat cat=(Cat)animal;
}else{
System.out.println("無法進行類型轉(zhuǎn)換 Cat");
}
//會打印出來 “無法進行類型轉(zhuǎn)換 Cat”
方法的重寫
重寫父類繼承的方法,調(diào)用方法是優(yōu)先調(diào)用子類的方法近上。
規(guī)則:返回值類型剔宪,方法名,參數(shù)類型及個數(shù)都相同。
接口 interface
類是一種具體實現(xiàn)體歼跟,而接口定義了某一批類所需要遵守的規(guī)范和媳,接口不關(guān)心這些類的內(nèi)部數(shù)據(jù),也不關(guān)心這些類里方法的實現(xiàn)細(xì)節(jié)哈街,而只規(guī)定這些類里必須提供某些方法留瞳。
接口定義的基本語法
[修飾符] interface 接口名 [extends 父接口1,父接口2...]
{
零個到多個常量定義
零個到多個抽象方法的定義
}
- 接口就是用來被繼承被實現(xiàn)的,修飾符一般建議用public
- 注意:不能使用private和protected修飾接口骚秦。
- 接口是抽象的她倘,abstract(不寫abstract系統(tǒng)會自動加上)
常量:接口中的屬性是常量,即使定義時不添加public static final 修飾符作箍,系統(tǒng)也會自動加上
方法:接口中的方法只能是抽象方法硬梁,即使定義時不添加public abstract修飾符,系統(tǒng)也會自動加上胞得。
[修飾符] class 類名 extends 父類 implements 接口1,接口2...{
類體部分//如果繼承了抽象類荧止,需要實現(xiàn)繼承的抽象方法;要實現(xiàn)接口中的抽象方法
}
如果要繼承父類阶剑,繼承父類必須在實現(xiàn)接口之前
使用接口
一個類可以實現(xiàn)一個或多個接口跃巡,實現(xiàn)接口使用implements關(guān)鍵字。Java中一個類只能繼承一個負(fù)類牧愁,不夠靈活素邪,通過實現(xiàn)多個接口可以做補充。
匿名內(nèi)部類
接口在使用過程中猪半,還經(jīng)常與匿名內(nèi)部類配合使用
匿名內(nèi)部類就是沒有名字的內(nèi)部類兔朦,多用于關(guān)注實現(xiàn)而不關(guān)注實現(xiàn)類的名稱
【示例】
IPlayGame ip=new IPlayGame(){
@Override
public void playGame(){
System.out.println("使用匿名內(nèi)部類的方式實現(xiàn)接口");
}
};
ip.playGame();
或者
new IPlayGame(){
@Override
public void playGame(){
System.out.println("使用匿名內(nèi)部類的方式實現(xiàn)接口");
}
}.playGame();
語法
Interface i=new Interface(){
public void method(){
System.out.println("匿名內(nèi)部類實現(xiàn)接口的方式")
}
}
Object 類
所有類的父類,如果一個類沒有使用extends關(guān)鍵字明確標(biāo)識繼承另外一個類磨确,那么這個類默認(rèn)繼承Object類沽甥。Object類中的方法,適合所有子類
toString()
在Objecty類里面定義toString()方法的時候反悔對象的Hash code(對象地址字符串)俐填。
可以通過重寫toString()方法表示出對象的屬性安接。
equals()
比較的是對象的引用是否指向同一塊內(nèi)存地址。
UML
概念
Unified Modeling Language(UML)統(tǒng)一建模語言或標(biāo)準(zhǔn)建模語言
是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言
為軟件開發(fā)的所有階段提供模型化和可視化支持
常用UML圖
用例圖(The Use Case Diagram):用例圖能夠以可視化的方式英融,表達系統(tǒng)如何滿足所收集的業(yè)務(wù)規(guī)則盏檐,以及特定的用戶需求等信息。
序列圖(The Sequence Diagram):序列圖用于按照交互發(fā)生的一系列順序驶悟,顯示對象之間的這些交互胡野。
類圖(The Class Diagram):UML類圖、業(yè)務(wù)邏輯和所有支持結(jié)構(gòu)一同被用于定義全部的代碼結(jié)構(gòu)痕鳍。
UML建模工具
Visio硫豆、Rational Rose龙巨、PowerDesigner