Java學習筆記——繼承、接口、多態

浮點數的運算須要注意的問題:數組

BigDecimal operand1 = new BigDecimal("1.0");
    BigDecimal operand2 = new BigDecimal("0.8");
    BigDecimal subtract = operand1.subtract(operand2);
    BigDecimal divide = operand1.divide(operand2);
    System.out.println(subtract);//結果爲0.2
    System.out.println(1 - 0.8);//結果爲0.19999999999999996

1、對象封裝

對象的比較ide

BigDecimal d = new BigDecimal("0.1");
    BigDecimal e = new BigDecimal("0.1");
    BigDecimal f = e;
    System.out.println(d == e);//不是同一對象,因此爲false
    System.out.println(d.equals(e));//equals比較對象的值是否相同
    System.out.println(e == f);//綁定爲同一對象
    System.out.println(d != e);//結果爲true,由於的確沒有參考同一對象值

對象實例的複製函數

Clothes[] c1 = {new Clothes("blue", 'S'), new Clothes("red", 'L')};
    Clothes[] c2 = new Clothes[c1.length];
    for (int i = 0; i < c2.length; i++) {
        c2[i] = c1[i];
    }
    c1[0].color = "yellow"; 
    System.out.println(c2[0].color);//淺層複製,只是複製參考,沒有將對象複製過去,System.arraycopy和Arrays.copyOf()也不能夠,只能自行復制,內部元素單獨複製

字符串的編譯this

String t1 = "Ja" + "va";//都是常量,編譯時直接看爲"Java"
    String t2 = "Java";
    System.out.println(t1 == t2);//結果爲true

數組的複製code

int[] arr1 = {1,2,3};
    int[] arr2 = arr1;//指向同一數組,要想複製需另建新數組
    arr2[1] = 20;
    System.out.println(arr1[1]);

static方法或區塊中不能夠出現this關鍵字,也不可引用非靜態的成員變量,非靜態的方法和區塊,能夠使用static數據成員或方法成員對象

public static int sum(int a, int... num){//不定長自變量,必須放在最後面,只能用一個,對象也適用
        int sum = 0;
        for (int i : num) {
            sum += i;
        }
        return sum;
    }

Java中只有傳值調用繼承

class Customer{
    String name;
    public Customer(String name) {
        this.name = name;
    }
}
        
Customer c1 = new Customer("張三");
some(c1);
System.out.println(c1.name);//顯示李四
    
Customer c2 = new Customer("趙六");
other(c2);
System.out.println(c2.name);//顯示趙六
 

static void some(Customer c){
    c.name = "李四";
}
static void other(Customer c){
    c = new Customer("王五");//創建新對象指定給c參考,本來參考的對象會被清除
}

2、繼承與多態

關於繼承的幾點總結
一、一方面能夠避免重複定義的行爲,同時也不能爲了不重複就是用繼承,不然會引發程序維護上的問題。
二、繼承須要結合多態靈活使用才能發揮出靈活的做用。
三、繼承一樣也可讓子類從新定義父類的方法,或者在父類中定義抽象方法從而將父類定義成抽象類(只能被繼承而不能被實例化)。
四、繼承的同時也能夠從新定義細節,使用super調用父類方法的內容。從新定義時對於父類方法的權限,只能擴大不能縮小。子類經過指定super中的參數來決定調用父類的某一個構造函數。
多態:即便用單一接口操做多種類型的對象。單一接口能夠是多種類型的父類,他們都屬於父類這種類型,因此能夠避免爲每一個類型重複定義方法,從而能夠提升代碼的維護性。接口

3、接口與多態

關於接口的幾點總結
一、接口用於定義行爲,使用interface關鍵字定義,接口中的方法不能直接操做,表示爲public abstract,類操做接口使用implements關鍵字,操做接口時能夠操做接口中的方法或是直接標示爲abstract。
二、繼承會有是一種的關係,接口操做表示擁有行爲,,判斷是方式爲右邊是否是擁有左邊的行爲。
三、類能夠操做兩個以上的接口,擁有兩個以上的行爲,類能夠同時繼承某個類,並操做某些接口。接口能夠繼承自另外一接口,能夠繼承兩個以上接口,繼承父接口的行爲,再在子接口中額外定義行爲。
四、接口能夠枚舉常數,只能定義爲public static final,能夠省略。ci

相關文章
相關標籤/搜索