Java基礎 筆記(2)

來源:互聯網
上載者:User

標籤:java

抽象類別:
abstract修飾的類,抽象類別中可以有抽象方法,也可以有非抽象方法。
抽象類別不能執行個體化對象。
如果子類繼承了抽象類別,必須實現抽象類別中所有的抽象方法。
抽象方法必須在抽象類別中。
1 抽象類別一定是父類嗎? 不一定是父類,可以繼承其他類或實現介面
2 抽象類別可以有構造方法嗎?有,用於子類對象的初始化
3 有抽象方法的類一定是抽象類別嗎?一定
4 抽象類別中一定有抽象方法嗎?不一定
5 抽象方法不可以和哪些關鍵字同時使用?
final:抽象類別必須有子類,被final修飾的類不能有子類
static:抽象方法不能被調用,靜態方法通過類名調用
private:抽象方法必須是可以被子類重寫的,私人方法不能被重寫

介面 interface:
interface 介面名{
抽象方法(public abstract)
全域常量(public static final)
}

介面:interface 規範介面可以解決單繼承的問題。介面支援多繼承。子類實現介面是,必須重寫介面中的抽象方法。建立子類對象時,調用子類重寫的方法。介面好處:    1 規範    2 提高程式可擴充性    3 降低類之間的依賴關係

通過繼承可以得到該繼承體系的準系統
實現介面可以得到該繼承體系之外的額外的功能

多態:
向上轉型:父類 對象名 = new 子類();
向下轉型:子類 對象名 = (子類)父類對象;
前提條件:向上是向下的前提,需要強轉
可能會拋出異常:.ClassCastException
解決:判斷
if(對象 instanceof 類名){}

多態中成員的特點:
成員變數:編譯時間能訪問哪些變數看父類,執行結果看父類
成員函數:編譯時間期能訪問哪些方法看父類,執行結果看子類(前提子類重寫父 類的方法,沒有重寫還是看父類)
靜態成員函數:編譯執行都看父類

Object類:所有類的父類
String toString():Object的類名@16進位雜湊碼
int hashCode():雜湊碼 —set集合
boolean equals():比較地址==,如果比較對象需要重寫
Class getClass():獲得類名—–反射
擁有的基本方法:
clone():返回該對象的一個副本
equals(Object obj):判斷兩個對象是否相等(預設比較的是對象引用而不是值)
finalize() 當GC確定不存在對該對象的更多引用時,調用此方法
getClass() 返回該對象運行時類
hashCode() 返回雜湊碼
notify() 喚醒在該對象監視器上等待的單個線程
notifyAll() 喚醒在該對象監視器上等待的所有線程
toString() 返回該對象的字串表達(預設是:Object的類名@16進位雜湊碼)
wait() 讓一個線程等待
wait(long timeout) 等待一定時間

模板模式:
定義一個功能時,功能的一部分是確定的,而另一部分不確定。
確定的部分需要用到不確定的部分。
把不確定的部分暴露出去,讓子類實現

    abstract class  類名{        //確定部分        public void f(){            f1();        }        //不確定部分        public abstract void f1();    }

執行個體:
public class TempletModel {

public static void main(String[] args) {    SuperMan spiderMan = new SpiderMan();    SuperMan ironMan = new IronMan();    spiderMan.saveWorld();    ironMan.saveWorld();}

}
abstract class SuperMan {
public void saveWorld() {
save();//第一步
overCome();//第二步
}
abstract public void save();
abstract public void overCome();
}
class SpiderMan extends SuperMan {
@Override
public void save() {
System.out.println(“我是蜘蛛俠,我在拯救世界”);
}
@Override
public void overCome() {
System.out.println(“我是蜘蛛俠,我把世界拯救了”);
}
}
class IronMan extends SuperMan {
@Override
public void save() {
System.out.println(“我是鋼鐵俠,我在拯救世界”);
}
@Override
public void overCome() {
System.out.println(“我是鋼鐵俠,我把世界拯救了”);
}
}
調用:IronMan spiderMan = new SpiderMan();
spiderMan.saveWorld();

內部類:
成員內部類: 內部類處在了外部類成員的位置上,所以內部類可以直接
訪問外部類的成員
靜態內部類: 構建器的使用(Builder)
局部內部類
匿名內部類

特點: 內部類可以直接存取外部類成員        外部類要訪問內部類的成員,必須建立內部類的對象作用:    1 隱藏部分資訊    2 可以訪問外部類的私人成員    3 彌補了單繼承的局限性    4 解決問題:如果要描述一個事物中還包括另一個事物,        同時這個事物要訪問被描述的事物產生位元組碼檔案:外部類$內部類.class一  成員內部類:內部類處在了外部類成員的位置上,所以內部類可以直接    訪問外部類的成員[public/default]class 外部類{    屬性    方法    內部類:    [存取修飾詞] class 內部類{ //public private default protected        屬性        方法    }}說明:1 內部類可以直接調用外部類的成員,包括private2 如果內部類與外部類的屬性或者方法同名時,則內部類預設調用內部類自己的。    如果想調用外部類的        外部類.this.成員3 建立內部類對象    1)        外部類 外部類對象 = new 外部類();        外部類.內部類 內部類對象 = 外部類對象.new 內部類();    2)        外部類.內部類 內部類對象 = new 外部類().new 內部類();4 如果外部類想調用內部類成員,需要通過建立內部類對象來調用。5 編譯之後產生的內部類位元組碼檔案為:外部類$內部類.class

執行個體:

class Outer1
{
private int num = 5;
class Inner1 //成員內部類
{
int num = 500;
public void show(){
System.out.println(“inner–>num=”+num);
System.out.println(“outer–>num=”+Outer1.this.num);
}
}

public void test(){  //外部類的方法    Inner1 in = new Inner1();//外部類訪問內部類成員,需要通過對象訪問    in.show();}

}

二 靜態內部類:相當於外部類,因為static修飾在初始化外部類時就已經被載入到記憶體中了
[public|default] class 外部類{
屬性
方法
//靜態內部類
[存取修飾詞] static class 內部類{
屬性
方法
}
}
注意:
1 不能調用外部類非靜態成員
2 允許定義非靜態變數和方法
3 內部類中不能使用 外部類.this
4 靜態內部類使用的格式(不依賴於外部類對象)
外部類.內部類 內部類對象 = new 外部類.內部類();
執行個體:
class Outer2
{
static int num = 10;
static class Inner2 //靜態內部類
{
public static void show(){
System.out.println(“num=”+num);
}
}
public void test(){
//Inner2.show();
Inner2 in = new Inner2();
in.show();
}
}

三 局部內部類:定義在方法的內部
[public|default] class 外部類{
屬性
方法(){
class 內部類{

        }    }}應用:多線程、網路下載注意:1 局部內部類或者局部方法的存取修飾詞只能是default的2 局部內部類可以訪問外部類成員3 局部內部類如果想使用所在方法的局部變數時,該變數必須是final的(因為final存在於方法區,生命週期較長,不      影響局部內部類的使用)4 局部內部類定義在方法中,適用範圍僅在方法內

執行個體:
class Outer3
{
int a = 5;
void test(){
final int b = 100;
class Inner3
{
public void show(){
System.out.println(“外部類成員a=”+a);
System.out.println(“方法中的成員b=”+b);
}
}//end class
Inner3 in = new Inner3();
in.show();
}//end test()
}

匿名內部類:內部類的簡寫,沒有類名
只使用一次對象時,才會定義匿名內部類

前提:匿名內部類必須繼承或者實現一個外部類或者介面

應用:應用於抽象類別和介面,增加程式的靈活性

文法:
類名 對象名 = new 類名(){ //抽象類別或者介面的名字
將抽象類別或者介面的方法實現
};

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java基礎 筆記(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.