學而時習之---Java基礎

   * 對象
    * 類
    * 成員方法
    * 構造方法
    * 常量
    * 變量:局部變量、類變量(靜態變量)、成員變量
    * Java大小寫敏感,類名首字母大寫,方法名首字母小寫,源文件名與類名相同,主方法口:public static void main(String []args)
    * Java標識符:以字母 $ _ 開頭,首字符之后可以是字母 $ _ 數字
    * 訪問控制符:public protected default private
    * 修飾符:static final abstract synchronized transient volatile
    * 八種基本數據類型:byte short int long float double boolean char
    * 類型轉換
    * 算術運算符: + - * / % ++ --
    * 關系運算符: ==  !=  >  <  >=  <=
    * 邏輯運算符:&&  ||  !
    * 位運算符
    * 賦值運算符:=  +=  -=  *=  /=  %=  等
    * 三元運算符:c = a>b ? d : e
    * 循環結構:while循環    do...while循環    for循環
    * 分支結構:if語句  switch語句
    * Number類 Math類 Character類 String類 StringBuffer類  Scanner類
    * Java異常處理
    * Java繼承
    * Java Override/Overload
    * Java多態
    * Java抽象類
    * Java封裝
    * Java接口
    * Java package
    * Java 網絡編程
    * Java多線程
    * Java數據結構
    * 迭代器

1.類和對象

package test;
/*
 * Java對象和類:
 *      對象:對象是類的一個實例,有狀態和行為。
 *      類:類是一個模板,描述一類對象的行為和狀態。
 * Java中的類
 *      類包含以下類型變量:
 *          局部變量:在方法、構造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結束后,變量就會自動銷毀。
 *          成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在創建對象的時候實例化。成員變量可以被類中方法、構造方法和特定類的語句塊訪問。
 *          類變量:類變量也聲明在類中,方法體之外,但必須聲明為static類型。
 * 構造方法:每個類都有構造方法。如果沒有顯式地為類定義構造方法,Java編譯器將會為該類提供一個默認構造方法。在創建一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。
 * 創建對象:
 *      聲明:聲明一個對象,包括對象名稱和對象類型。
 *      實例化:使用關鍵字new來創建一個對象。
 *      初始化:使用new創建對象時,會調用構造方法初始化對象。
 * */
public class Test {
    //兩個成員變量
    int age;
    String sex;
    
    //兩個構造方法:一個不帶參數,一個帶參數
    public Test(){
        System.out.println("構造方法一!");
    }
    public Test(String name){
        System.out.println("構造方法二:" + name);
    }
    //定義一個方法
    public void huhu(){
        int h = 11;//定義一個局部變量
        System.out.println("調用方法,局部變量值:"+h);
    }
    
    public static void main(String []args){
        //下面兩個對象在創建的時候使用了不同的構造方法
        
        Test myTest = new Test();//創建一個myTest對象
        myTest.age = 11;//給對象的屬性設定值
        myTest.sex = "男";
        myTest.huhu();//調用方法
        System.out.println("myTest的age和sex分別是:"+myTest.age+','+myTest.sex);//訪問成員變量
        
        Test myTest2 = new Test("狗狗");
        myTest2.age = 13;
        myTest2.sex = "女";
        myTest2.huhu();//調用方法
        System.out.println("myTest2的age和sex分別是:"+myTest2.age+','+myTest2.sex);//訪問成員變量
    }
}

Snip20170918_1.png

2.java基本數據類型

/*
 *Java基本數據類型
 *  byte:有符號整數,一個字節,(-2^7 ~ 2^7-1)
 *  short:有符號整數,兩個字節,(-2^15 ~ 2^15-1)
 *  int:有符號整數,四個字節,(-2^31 ~ 2^31-1)
 *  long:有符號整數,八個字節,(-2^63 ~ 2^63-1)
 *  float:單精度浮點數,四個字節
 *  double:雙精度浮點數,八個字節
 *  boolean:true/false
 *  char:兩個字節
 *Java 中使用 final 關鍵字來修飾常量
 * */
public class Test {
    
    public static void main(String []args){
        System.out.println("基本類型:byte,short,int,long,float,double,char的位數:"+Byte.SIZE+','+Short.SIZE+','+Integer.SIZE+','+Long.SIZE+','+Float.SIZE+','+Double.SIZE+','+Character.SIZE);
        final double PI = 3.1415927;
        System.out.println("常量PI的值:"+PI);
    }
}
Snip20170918_3.png

3.Java變量類型

/*
 *Java變量
 *  聲明變量的基本格式:type identifier = value;
 *  變量類型:
 *      類變量:獨立于方法之外的變量,用 static 修飾。
 *          類變量也稱為靜態變量,在類中以static關鍵字聲明,但必須在方法構造方法和語句塊之外。
 *          無論一個類創建了多少個對象,類只擁有類變量的一份拷貝。
 *          靜態變量除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化后不可改變。
 *          靜態變量儲存在靜態存儲區。經常被聲明為常量,很少單獨使用static聲明變量。
 *          靜態變量在程序開始時創建,在程序結束時銷毀。
 *          與實例變量具有相似的可見性。但為了對類的使用者可見,大多數靜態變量聲明為public類型。
 *          默認值和實例變量相似。數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。變量的值可以在聲明的時候指定,也可以在構造方法中指定。此外,靜態變量還可以在靜態語句塊中初始化。
 *          靜態變量可以通過:ClassName.VariableName的方式訪問。
 *          類變量被聲明為public static final類型時,類變量名稱一般建議使用大寫字母。如果靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
 *      實例變量:獨立于方法之外的變量,不過沒有 static 修飾。
 *          實例變量聲明在一個類中,但在方法、構造方法和語句塊之外;
 *          當一個對象被實例化之后,每個實例變量的值就跟著確定;
 *          實例變量在對象創建的時候創建,在對象被銷毀的時候銷毀;
 *          實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;
 *          實例變量可以聲明在使用前或者使用后;
 *          訪問修飾符可以修飾實例變量;
 *          實例變量對于類中的方法、構造方法或者語句塊是可見的。一般情況下應該把實例變量設為私有。通過使用訪問修飾符可以使實例變量對子類可見;
 *          實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值可以在聲明時指定,也可以在構造方法中指定;
 *          實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名:ObejectReference.VariableName。
 *      局部變量:類的方法中的變量。
 *          局部變量聲明在方法、構造方法或者語句塊中;
 *          局部變量在方法、構造方法、或者語句塊被執行的時候創建,當它們執行完成后,變量將會被銷毀;
 *          訪問修飾符不能用于局部變量;
 *          局部變量只在聲明它的方法、構造方法或者語句塊中可見;
 *          局部變量是在棧上分配的。
 *          局部變量沒有默認值,所以局部變量被聲明后,必須經過初始化,才可以使用。
 *          
 * */
public class Test {
    static int age ;//類變量
    String sex;//實例變量
    
    public void pup(){
        int a = 0;//局部變量
        a = a + 7;
        System.out.println("局部變量a的值:"+a);
    }
    
    public static void main(String []args){
        Test test = new Test();
        age = 10;
        test.sex = "男";
        System.out.println("類變量age的值:"+age+"成員變量sex的值:"+test.sex);
        test.pup();
    }
}
Snip20170918_4.png

4.Java修飾符

/*
 *Java修飾符
 *  訪問控制修飾符
 *      default (即缺省,什么也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
 *      private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
 *      public : 對所有類可見。使用對象:類、接口、變量、方法
 *      protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
 *  非訪問修飾符
 *      static 修飾符,用來修飾類方法和類變量。
 *          靜態變量:static 關鍵字用來聲明獨立于對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱為類變量。
 *          靜態方法:static 關鍵字用來聲明獨立于對象的靜態方法。靜態方法不能使用類的非靜態變量。
 *      final 修飾符,用來修飾類、方法和變量,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,是不可修改的。
 *      abstract 修飾符,用來創建抽象類和抽象方法。
 *      synchronized 和 volatile 修飾符,主要用于線程的編程。
 *          
 * */

5.Java運算符

/*
 *Java運算符
 *      算術運算符
 *          + - *  /  % ++ --
 *      關系運算符
 *          ==  !=  >  <  >=  <=
 *      位運算符
 *          &  |  ^  ~  <<  >>  >>>
 *      邏輯運算符
 *          &&(邏輯與)  ||(邏輯或)  !(邏輯非)
 *      賦值運算符
 *          =  +=  -=  *=  /=  
 *      其他運算符
 *          三元運算符:variable x = (expression) ? value if true : value if false
 *          instanceof運算符:檢查該對象是否是一個特定類型
 *          
 * */

6.Java循環

/*
 *Java循環結構
 *      while
 *      do...while
 *      for 
 *  break關鍵字    主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。
 *  continue關鍵字  適用于任何循環控制結構中。作用是讓程序立刻跳轉到下一次循環的迭代。
 * */
public class Test {
    
    public static void main(String []args){
        
        //while循環
        int x = 0;
        while(x < 10){
            if(x == 5){
                break;//結束循環
            }
            System.out.println("value of x :"+x);
            x++;
        }
        //do...while循環
        System.out.println();
        int y = 1;
        do{
            System.out.println("value of y :"+y);
            y++;
        }while(y<5);
        //for循環
        System.out.println();
        for(int i = 0; i<5; i++){
            if(i == 3){
                continue;//結束本次循環,繼續循環
            }
            System.out.println("value of i :"+i);
        }
        //增強for循環
        String [] names = {"a", "b", "c", "d", "e"};
        for(String name: names){
            System.out.println(name);
        }
    }
}
Snip20170918_5.png

7.Java分支結構

/*
*Java分支結構
*  if語句
*  switch語句
* */
public class Test {
   
   public static void main(String []args){
       
       int x = 30;
       if(x == 10){
           System.out.println("value of x is 10");
       }else if(x == 20){
           System.out.println("value of x is 20");
       }else if(x == 30){
           System.out.println("value of x is 30");
       }else{
           System.out.println("這是 else 語句");
       }
       
       char grade = 'C';
       switch(grade){
       case 'A':
           System.out.println("優秀");
           break;
       case 'B':
           System.out.println("良好");
           break;
       case 'C':
           System.out.println("及格");
           break;
       case 'D':
           System.out.println("不及格");
           break;
       default:
           System.out.println("未知等級");
       }
   }
}
Snip20170918_6.png

8.Java Number & Math 類

/*
 *Java Number & Math 類
 *  Number & Math 類方法
 *      xxxValue():將 Number 對象轉換為xxx數據類型的值并返回  byteValue()  doubleValue() floatValue() intValue() longValue() shortValue()
 *      compareTo():將number對象與參數比較。兩個不同類型的數據不能用此方法來比較
 *      equals():判斷number對象是否與參數相等。
 *      valueOf():返回一個 Number 對象指定的內置數據類型
 *      toString():以字符串形式返回值。
 *      parseInt():將字符串解析為int類型。
 *      abs():返回參數的絕對值。
 *      ceil():對整形變量向左取整,返回類型為double型。對一個數進行上舍入,返回值大于或等于給定的參數
 *      floor():對整型變量向右取整。返回類型為double類型,小于或等給定的參數
 *      rint():返回與參數最接近的整數。返回類型為double。
 *      round():返回一個最接近的int、long型值。
 *      min():返回兩個參數中的最小值。
 *      max():返回兩個參數中的最大值。
 *      exp():返回自然數底數e的參數次方。
 *      log():返回參數的自然數底數的對數值。
 *      pow():返回第一個參數的第二個參數次方。
 *      sqrt():求參數的算術平方根。
 *      sin():求指定double類型參數的正弦值。
 *      cos():求指定double類型參數的余弦值。
 *      tan():求指定double類型參數的正切值。
 *      asin():求指定double類型參數的反正弦值。
 *      acos():求指定double類型參數的反余弦值。
 *      atan():求指定double類型參數的反正切值。
 *      atan2():將笛卡爾坐標轉換為極坐標,并返回極坐標的角度值。
 *      toDegrees():將參數轉化為角度。
 *      toRadians():將角度轉換為弧度。
 *      random():返回一個隨機數。
 * */
public class Test {
    
    public static void main(String []args){
        Integer x = 5;
        System.out.println(x.doubleValue());//返回double原生數據類型
        System.out.println(x.compareTo(3));//相等返回0,小于返回-1,大于返回1.
        Integer y = 5;
        System.out.println(x.equals(y));//與方法的參數類型與數值都相等返回 True,否則返回 False。
        System.out.println(Float.valueOf("80"));//參數為 Integer 對象的整數或者字符串
        System.out.println(x.toString());
        System.out.println(Double.parseDouble("5"));
        System.out.println(Math.abs(-6));//返回參數的絕對值
        System.out.println(Math.ceil(3.43));
        System.out.println(Math.ceil(-3.43));//參數為double 或 float
        System.out.println(Math.floor(4.6));
        System.out.println(Math.floor(-4.6));//返回 double 類型數組,小于或等于給定的參數
        System.out.println(Math.rint(100.6));
        System.out.println(Math.rint(100.5));//返回 double 類型數組,是最接近參數的整數值
        System.out.println(Math.round(100.6));
        System.out.println(Math.round(100.5));//參數為double,float,返回一個最接近的int、long型值
        System.out.println(Math.min(12.3, 12.4));
        System.out.println(Math.max(12.3, 12.4));
        System.out.println(Math.exp(2));//返回自然數底數e的2次方
        System.out.println(Math.log(7.38905609893065));//返回參數的自然數底數的對數值。
        System.out.println(Math.pow(3, 3));//返回第一個參數的第二個參數次方。
        System.out.println(Math.sqrt(4));//返回參數的算術平方根。
        System.out.println(Math.random());//用于返回一個隨機數,隨機數范圍為 0.0 =< Math.random < 1.0。
        
    }
}
Snip20170919_7.png

9.Java Character類

/*
 *Java Character類
 *  Character 類用于對單個字符進行操作,Character 類在對象中包裝一個基本類型 char 的值
 *  Character方法
 *      isLetter():是否是一個字母
 *      isDigit():是否是一個數字字符
 *      isWhitespace():是否是一個空格
 *      isUpperCase():是否是大寫字母
 *      isLowerCase():是否是小寫字母
 *      toUpperCase():指定字母的大寫形式
 *      toLowerCase():指定字母的小寫形式
 *      toString():返回字符的字符串形式,字符串的長度僅為1
 * */
public class Test {
    
    public static void main(String []args){
        System.out.println(Character.isLetter('c'));
        System.out.println(Character.isLetter('5'));
        System.out.println();
        System.out.println(Character.isDigit('c'));
        System.out.println(Character.isDigit('5'));
        System.out.println();
        System.out.println(Character.isWhitespace('c'));
        System.out.println(Character.isWhitespace(' '));
        System.out.println(Character.isWhitespace('\n'));
        System.out.println(Character.isWhitespace('\t'));
        System.out.println();
        System.out.println( Character.isUpperCase('c'));
        System.out.println( Character.isUpperCase('C'));
        System.out.println();
        System.out.println( Character.isLowerCase('c'));
        System.out.println( Character.isLowerCase('C'));
        System.out.println();
        System.out.println(Character.toUpperCase('a'));
        System.out.println();
        System.out.println(Character.toLowerCase('A'));
        System.out.println();
        System.out.println(Character.toString('a'));
    }
}
Snip20170919_8.png

10.Java數組

/*
 *Java數組 用來存儲固定大小的同類型元素。
 * */
public class Test {
    
    public static void main(String []args){
        int[] myList = new int[5];//創建數組
        myList[0] = 0;
        myList[1] = 1;
        myList[2] = 2;
        myList[3] = 3;
        myList[4] = 4;
        
        int total = 0;
        for(int i = 0; i < myList.length; i++){
            total += myList[i];
        }
        System.out.println("總和為:"+total);
        
        double[] myList2 = {1.1, 2.2, 3.3, 4.4, 5.5};//創建數組
        for(double element: myList2){//遍歷數組
            System.out.println(element);
        }
        
        String s[][] = new String[2][];//二維數組
        s[0] = new String[2];
        s[1] = new String[3];
        s[0][0] = new String("Good");
        s[0][1] = new String("Luck");
        s[1][0] = new String("to");
        s[1][1] = new String("you");
        s[1][2] = new String("!");
        for(String[] element: s){
            for(String ele: element){
                System.out.println(ele);
            }
        }
    }
}
Snip20170919_9.png

11.Java String類

/*
 *Java String 類 
 *  String 類是不可改變的,所以你一旦創建了 String 對象,那它的值就無法改變了
 *Java StringBuffer 和 StringBuilder 類
 *  和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,并且不產生新的未使用對象。
 * */
public class Test {
    
    public static void main(String []args){
        String site = "www.baidu.com";
        int len = site.length();//字符串長度
        System.out.println("網址長度:" + len);
        System.out.println(site.indexOf('b'));//字符b在site中的位置
        System.out.println(site.substring(4, 9));//子字符串
        System.out.println(site.toUpperCase());//大寫
        
        float x = 1.1f;
        int y = 2;
        String z = "haha";
        String fs = String.format("x,y,z三個變量的值為: %f, %d, %s", x, y, z);//創建格式化字符串
        System.out.println(fs);
        
        StringBuffer sb = new StringBuffer("官網:");
        sb.append("www");
        sb.append(".baidu.com");
        System.out.println(sb);
    }
}
Snip20170919_10.png

12.Java方法

/*
 *Java 方法
 *      Java方法是語句的集合,它們在一起執行一個功能。
 *          方法是解決一類問題的步驟的有序組合
 *          方法包含于類或對象中
 *          方法在程序中被創建,在其他地方被引用
 *      一個方法的所有部分:修飾符 返回值類型 方法名(參數類型 參數名){方法體 return 返回值;}
 *          修飾符:可選,定義了該方法的訪問類型。
 *          返回值類型:returnValueType或者void
 *          方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
 *          參數類型:參數是可選的。
 *          方法體:方法體包含具體的語句,定義該方法的功能。
 *      方法的重載:方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。
 *      變量作用域:變量的范圍是程序中該變量可以被引用的部分。
 *      構造方法:當一個對象被創建時候,構造方法用來初始化該對象。構造方法和它所在類的名字相同,但構造方法沒有返回值。
 *      finalize()方法:它在對象被垃圾收集器析構(回收)之前調用,這個方法叫做 finalize( ),它用來清除回收對象。
 * */
public class Test {
    int age;
    //構造方法
    Test(int i){
        age = i;
    }
    public static void main(String []args){
        int i = 5;
        int j = 2;
        int k = max(i, j);
        System.out.println(i + " 和 " + j + " 比較,最大值是:" + k);
        
        double x = 5.5;
        double y = 6.6;
        double z = max(x,y);
        System.out.println(x + " 和 " + y + " 比較,最大值是:" + z);
        
        Test myTest = new Test(10);
        System.out.println(myTest.age);
        
        myTest = null;
        System.gc();//調用Java垃圾收集器
        
        
    }
    
    public static int max(int num1, int num2){
        int result;
        if(num1 > num2){
            result = num1;
        }else{
            result = num2;
        }
        
        return result;
    }
    
    //方法的重載:方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。
    public static double max(double num1, double num2){
        double result;
        if(num1 > num2){
            result = num1;
        }else{
            result = num2;
        }
        
        return result;
    }
    //指定在對象銷毀時候要執行的操作。
    protected void finalize(){
        System.out.println("對象銷毀");
    }
}
Snip20170919_11.png

13.Java異常處理

/*
 *Java異常處理
 * */
public class Test {
    public static void main(String []args){
        int a[] = new int[2];
        try{
           System.out.println("Access element three :" + a[3]);
        }catch(ArrayIndexOutOfBoundsException e){
           System.out.println("Exception thrown  :" + e);
        }
        finally{
           a[0] = 6;
           System.out.println("First element value: " +a[0]);
           System.out.println("The finally statement is executed");
        }
    }

}
Snip20170919_12.png

14.Java繼承

/*
 *Java繼承
 *  繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
 *  繼承的特性:
 *      子類擁有父類非private的屬性,方法。
 *      子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。
 *      子類可以用自己的方式實現父類的方法。
 *      Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別于C++繼承的一個特性。
 *      提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)。
 *  繼承關鍵字:
 *      extends關鍵字:在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。
 *      implements關鍵字:使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)。
 *      super與this關鍵字:
 *          super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前對象的父類。
 *          this關鍵字:指向自己的引用
 *      final關鍵字:final 關鍵字聲明類可以把類定義為不能繼承的,即最終類;或者用于修飾方法,該方法不能被子類重寫。
 * */
//父類
class Animal{
    protected int age;
    void go(){
        System.out.println("animal go:");
    }
}
//子類繼承父類
class Dog extends Animal{
    void go(){
        //調用父類方法
        super.go();
    }
}

public class Test {
    public static void main(String []args){
        Dog dog = new Dog();
        dog.age = 10;
        System.out.println("age:"+dog.age);
        dog.go();
    }
}
Snip20170920_1.png

15.Java 重寫(Override)與重載(Overload)

/*
 *Java 重寫(Override)與重載(Overload)
 *  重寫:重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!
 *      重寫規則:
 *          參數列表必須完全與被重寫方法的相同;
 *          返回類型必須完全與被重寫方法的返回類型相同;
 *          訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明為public,那么在子類中重寫該方法就不能聲明為protected。
 *          父類的成員方法只能被它的子類重寫。
 *          聲明為final的方法不能被重寫。
 *          聲明為static的方法不能被重寫,但是能夠被再次聲明。
 *          子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為private和final的方法。
 *          子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為public和protected的非final方法。
 *          重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
 *          構造方法不能被重寫。
 *          如果不能繼承一個方法,則不能重寫這個方法。
 *  重載:重載(overloading) 是在一個類里面,方法名字相同,而參數不同。返回類型可以相同也可以不同。
 *      重載規則:
 *          被重載的方法必須改變參數列表(參數個數或類型或順序不一樣);
 *          被重載的方法可以改變返回類型;
 *          被重載的方法可以改變訪問修飾符;
 *          被重載的方法可以聲明新的或更廣的檢查異常;
 *          方法能夠在同一個類中或者在一個子類中被重載。
 *          無法以返回值類型作為重載函數的區分標準。
 * */

16.Java多態

/*
 *Java 多態
 *   多態是同一個行為具有多個不同表現形式或形態的能力
 *  多態的優點:
 *      1. 消除類型之間的耦合關系
 *      2. 可替換性
 *      3. 可擴充性
 *      4. 接口性
 *      5. 靈活性
 *      6. 簡化性
 *  多態存在的三個必要條件
 *      繼承
 *      重寫
 *      父類引用指向子類對象
 * */

class Animal{
    public void eat(){
        System.out.println("haha");
    }
}
class Cat extends Animal{
    public void eat(){
        System.out.println("吃魚");
    }
}
public class Test {
    public static void main(String []args){
        Animal a = new Cat();
        a.eat();
    }
}
Snip20170920_2.png

17.


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,726評論 18 399
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,608評論 4 12
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,130評論 0 62
  • Java基礎常見英語詞匯(共70個)['?bd?ekt] ['?:rientid]導向的 ...
    今夜子辰閱讀 3,329評論 1 34
  • 這個系列面試題主要目的是幫助你拿輕松到offer,同時還能開個好價錢。只要能夠搞明白這個系列的絕大多數題目,在面試...
    獨念白閱讀 349評論 0 3