Object類、包裝類、內部類詳解

1、Object類

1、概念:
1.1 所有類在創建時都默認繼承了java.lang.Object
1.2 所有類對象都可以聲明爲類對象的引用

Object ob1=new String();
Object ob2=new Integer();

2、子類繼承了其方法:
2.1 equals
類似於”==”,比較對象的引用
ps:具體前面blog有詳講,這裏就不贅述了
2.2 toString():
返回一個對象的字符串表示形式(可改寫)
源碼如下:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

2.3、getClass():
返回一個對象的實際類型
ps:
- 其返回的是具體實例化的類型
- instanceof判斷的是其是否實例化了,包括其父類的判斷

2、包裝類

1、概念:
包裝類是對基本類型的包裝:所以也是8個
2、列舉表:

基本類型 包裝類
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

3、包裝類的轉換:
包裝類、String、基本類型間兩兩轉換
具體可參考我前一篇關於String的blog,中有詳解

3、內部類*

1、成員內部類
1.1 訪問權限:
可以訪問外部內的靜態或非靜態的屬性和方法
1.2 實例:
先實例化外部類,再實例化內部類
2、靜態內部類
1.1 訪問權限:
可以訪問外部內的靜態的屬性和方法
1.2實例:
先實例化外部類,再調用靜態類
3、局部內部類
1.1 訪問權限:
可以訪問外部內的靜態或非靜態的屬性和方法
1.2 實例:
在方法中實例化,接着實例化外部類,調用方法
4、匿名內部類
1.使用情況:
1.1 只實例化一次的對象
1.2 局部內部類要實現接口或繼承某些父類

最後貼上練習代碼君:

package com.jacob.javase;

/*
 * 內部類分類:
 * 1.成員內部類
 * 2.靜態內部類
 * 3.局部內部類
 * 4.匿名內部類
 */
public class InnerClass {
    public static void main(String[] args) {
        // 成員內部類的實例
        // MemberInner.Inner2 mi=(new MemberInner()).new Inner2();
        // mi.doSomething();
        // MemberInner mi1=new MemberInner();
        // mi1.method();
        // 靜態內部類的實例(可直接通過類調用)
        // StaticInner.Inner si=new StaticInner.Inner();
        // si.test();
        // 實例局部類
        // LocalInner li = new LocalInner();
        // li.doSomething();
        // 4.匿名內部類:使用條件:
        // 4.1 局部內部類可能就需要創建一個對象
        // 4.2 局部內部類需要實現外部接口或繼承某些父類
        new InnerClass();
        new Test() {

            @Override
            public void m1() {
                // TODO Auto-generated method stub
                System.out.println("匿名類test");
            }
        }.m1();
    }
}

interface Test {
    void m1();
}

// 1.成員內部類:
class MemberInner {
    private int a = 4;

    // 訪問權限:可訪問外部類的的靜態與非靜態的屬性和方法
    public class Inner2 {
        private int a = 5;

        public void doSomething() {
            System.out.println("Hello World!");
            System.out.println(this.a);// 5
            System.out.println(MemberInner.this.a);// 4
        }
    }

    public void method() {
        // 實例化成員內部類
        Inner2 inner = new Inner2();
        System.out.println(inner.a);
    }
}

// 2.靜態內部類:
class StaticInner {
    private static int a = 4;

    // 訪問權限:只能訪問外部類的靜態屬性和方法
    public static class Inner {
        public void test() {
            System.out.println(a);
        }
    }
}

// 3.局部內部類
// 訪問權限:可以訪問外部內的靜態或非靜態屬性和方法:
class LocalInner {
    public void doSomething() {
        int b = 1;
        final int a = 4;
        class Inner3 {
            int c = 1;

            public void test() {
                System.out.println(a + b);
            }
        }
        // 只能在方法塊中實例
        Inner3 li1 = new Inner3();
        li1.test();
        System.out.println(li1.c);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章