美文网首页
学而时习之---Java基础

学而时习之---Java基础

作者: 狼牙战士 | 来源:发表于2017-09-18 11:06 被阅读0次
       * 对象
        * 类
        * 成员方法
        * 构造方法
        * 常量
        * 变量:局部变量、类变量(静态变量)、成员变量
        * 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.

    
    

    相关文章

      网友评论

          本文标题:学而时习之---Java基础

          本文链接:https://www.haomeiwen.com/subject/qegvsxtx.html