java中常见的类
抽象類:
1. 抽象類可以寫普通方法,但有抽象方法必須是抽象類 2. 不能new這個抽象類,只能靠子類去實現它:約束!接口的作用:
1. 約束 2. 定義一些方法,讓不同的人實現~ 3. 默認方法都是public abstract 4. 屬性都是常量且public abstract final 5. 接口不能被實例化~,接口中沒有構造方法 6. implements可以實現多個接口 7. 必須要重寫接口中的方法內部類:
成員內部類:1. 可直接調用外部類的私有屬性和方法2. 內部類的屬性和外部類相同時會優先調用內部類3. 屬性相同時,在內部類可用Outer.this.屬性名,調用外部類的屬性4. 實例化內部類對象時要先實例化外部類對象,再Outer.Inner inner = outer.new Inner();創建對象5. 不可使用static,除非是用final修飾的常量靜態內部類:1. 和外部類的層次是一樣的2. 可包含靜態成員變量和方法3. 調用自身非靜態方法時要先實例化對象,Outer.Inner inner = new Outer.Inner();4. 調用自身靜態方法時可直接通過類名調用,Outer.Inner.show();局部內部類:1. 定義在方法中2. 局部內部類不能直接訪問,需要在局部類所在的方法中先實例化局部類對象,再在這個方法中調用局部類的方法和屬性,使用外部類對象調用局部類所在的方法才可使用3. 方法中的局部變量和方法不能有修飾符,局部類也是如此,但局部類里面的方法和屬性可用修飾符4. 訪問被包含的方法的局部變量時必須是常量,訪問時自動添加final,但一修改局部變量的值final就會默認去掉,程序報錯匿名內部類:1. 一個接口/類的方法的某個實現方式在程序中只會執行一次,使用子類去重寫會產生大量的代碼,使用匿名內部類可以直接實現,避免代碼冗余2. 匿名內部類可以用在具體類、抽象類、接口上,且對方法個數沒有要求3. 匿名內部類會隱式地繼承一個父類或實現一個接口。常用匿名內部類的情況:1. 只用到類的一個實例。2. 類在定義后馬上用到。3. 類非常小,通常5行代碼之內。4. 給類命名不會導致代碼更容易被理解。5. 注意:匿名內部類不能定義構造方法,并且功能上會受到很大的限制,如果不是很有必要,盡量不要去使用。測試代碼:
package com.test.day.Day05;public class Outer {private int id = 10;private String name = "劉德華";private int age = 18;public void out(){System.out.println("這是外部類的方法");}// 1. 成員內部類,可獲得外部類的私有屬性和方法 // public class Inner{ // // private int id = 12; // public void in(){ // System.out.println("這是內部類的方法"); // } // private static String country = "China"; // 會報錯,成員內部類不允許使用Static修飾屬性,除非是常量,用final修飾 // // // 內部類的屬性和外部類相同時會優先訪問內部類 // // 使用 外部類名.this.屬性名 可訪問外部類 // // 獲取外部類的私有屬性 // public void getID(){ // System.out.println(Outer.this.id); // } // }// 2. 靜態內部類,和外部類的層次一樣 // public static class Inner{ // private String address = "邢臺"; // private String phone = "110"; // // // 可包含靜態成員 // private static int count = 100; // // public static void show(){ // // 不能直接調用外部類的屬性 // // 先實例化一個外部對象 // Outer outer = new Outer(); // // 調用外部類的屬性 // System.out.println(outer.id); // } // }// 3. 局部內部類:定義在方法中public void show(){// 局部變量不能加任何修飾符,String address = "深圳";// 局部內部類不能加任何修飾符class Inner{// 局部內部類里面的屬性和方法可以加修飾符private String phone = "119";private String email = "111";public void show2(){//訪問外部類的屬性System.out.println(Outer.this.id);// 訪問內部類的屬性System.out.println(phone);// 訪問局部變量,此時address為final修飾的常量System.out.println(address);}}// 實例化內部類對象Inner inner = new Inner();inner.show2();} }實現方法:
package com.test.day.Day05;public class Application {public static void main(String[] args) {// 1. 成員內部類 // Outer outer = new Outer();//內部類可通過外部類來實例化 // Outer.Inner inner = outer.new Inner(); // inner.getID();// 2. 靜態內部類// 直接創建靜態內部對象 Out.Inner表示包含關系 // Outer.Inner inner = new Outer.Inner();// 調用方法 // inner.show(); // Outer.Inner.show();// 3. 局部內部類Outer outer = new Outer();outer.show();}}/* 1. 父類引用指向子類的對象 2. 把子類轉換為父類,向上轉型(可自動轉換) 3. 把父類轉換為子類,向下轉型;強制轉換 4. 方便方法的調用,減少重復的代碼!抽象: 封裝、繼承、多態*//*// instanceof 是 Java 的保留關鍵字,它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數據類型Object obj = new Student();// Object > String// Object > Person > Student// Object > Person > TeacherSystem.out.println(obj instanceof Student); // trueSystem.out.println(obj instanceof Person); // trueSystem.out.println(obj instanceof Object); // trueSystem.out.println(obj instanceof Teacher); // falseSystem.out.println(obj instanceof String); // false*/總結
- 上一篇: egret引擎下,微信分包,微信登陆,微
- 下一篇: 算法-贪心法