asp.net+Android+IOS開發 、Net培訓、期待與您交流!
(前言:本篇文章主要依據畢向東老師的課程視頻整理而成,如要詳細學習,請觀看畢老師視頻 百度網盤鏈接地址:http://pan.baidu.com/s/1mgngVl2)
目錄:1、面向對象三大特性 2、類和對象 3、內部類
1、面向對象三大特性 封裝、繼承、多態
封裝
概念:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
好處:將變化隔離;便于使用;提高重用性;安全性。
封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問。
繼承
好處:子類將得到基類中的所有域和方法,提高了代碼的復用性;讓類與類之間產生了關系,提供了另一個特征多態的前提。
多態
簡單例子:父類引用或者接口的引用指向了自己的子類對象。//Animal a = new Cat();
多態的好處:提高了程序的擴展性。
多態的弊端:當父類引用指向子類對象時,雖然提高了擴展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。(前期不能使用后期產生的功能,即訪問的局限性)
多態的前提: 1:必須要有關系,比如繼承、或者實現。 2:通常會有覆蓋操作。
關于基于繼承的多態的一個代碼示例
1 /* 2 對象的多態性:動物 x = new 貓(); 3 函數的多態性:函數重載、重寫 4 5 1、多態的體現 6 父類的引用指向了自己的子類對象 7 父類的引用也可以接收自己的對象 8 2、多態的前提 9 必須是類與類之間只有關系,要么繼承或實現10 通常還有一個前提,存在覆蓋11 3、多態的好處12 多態的出現大大的提高了程序的擴展性13 4、多態的弊端14 只能使用父類的引用訪問父類的成員15 5、多態的應用16 17 6、注意事項18 */19 20 /*21 需求:22 貓,狗。23 */24 25 abstract class Animal26 {27 abstract void eat();28 }29 30 class Cat extends Animal31 {32 public void eat()33 {34 System.out.);35 }36 public void catchMouse()37 {38 System.out.println("抓老鼠");39 }40 }41 42 class Dog extends Animal43 {44 public void eat()45 {46 System.out.println("吃骨頭");47 }48 public void kanJia()49 {50 System.out.println("看家");51 }52 }53 54 class DuoTaiDemo55 {56 public static void main(String[] args)57 {58 function(new Cat());59 function(new Dog());60 61 Animal a = new Cat();//向上轉型62 a.eat();63 64 Cat c = (Cat)a;//向下轉型65 c.catchMouse();66 67 68 }69 70 public static void function(Animal a)71 {72 a.eat();73 //用于子類型有限74 //或判斷所屬類型進而使用其特有方法75 if(a instanceof Cat)76 {77 Cat c = (Cat)a;78 c.catchMouse();79 }80 else if(a instanceof Dog)81 {82 Dog c = (Dog)a;83 c.kanJia();84 }85 }86 87 88 }
2、類和對象
類 :一個類可以被定義為描述行為的模板/藍色印花/指出其類型支持的對象。
對象 :對象具有狀態和行為。例如:狗有狀態 - 顏色,名稱,繁殖以及行為,搖頭晃腦,吠叫,吃。對象是類的實例。
從類創建對象時有三個步驟:
1、聲明: 變量聲明,一個變量名的對象類型。
2、實例: “new”關鍵字是用來創建對象。
3、初始化: 關鍵字 new 后跟調用一個構造函數。這個調用初始化新的對象。
關于構建類的一個簡單例子:
1 public class Employee{ 2 String name; 3 int age; 4 String designation; 5 double salary; 6 7 // This is the constructor of the class Employee 8 public Employee(String name){ 9 this.name = name;10 }11 // Assign the age of the Employee to the variable age.12 public void empAge(int empAge){13 age = empAge;14 }15 /* Assign the designation to the variable designation.*/16 public void empDesignation(String empDesig){17 designation = empDesig;18 }19 /* Assign the salary to the variable salary.*/20 public void empSalary(double empSalary){21 salary = empSalary;22 }23 /* Print the Employee details */24 public void printEmployee(){25 System.out.println("Name:"+ name );26 System.out.println("Age:" + age );27 System.out.println("Designation:" + designation );28 System.out.println("Salary:" + salary);29 }30 }
3、內部類
定義:將一個類的定義放在另一個類的定義內部。
規則:內部類的創建和普通類沒區別;
內部類可以直接訪問所屬外部類中的成員(包括私有的)
訪問格式:外部類名.this.成員名,成員名不沖突是可直接用成員名調用,所屬的外部類要訪問內部類必須要建立內部類對象。
局部內部類:1、不可以被成員修飾符修飾 2、可以直接訪問外部類的成員,因為還只持有外部類的引用,在所在的局部中只能訪問它所在的局部中的用final修飾的變量。
匿名內部類(其實就是內部類的一種簡寫格式):定義匿名內部類的前提----內部類必須是繼承一個類或者實現接口;
格式:new 父類名字(){子類實現的內容};
幾種內部類的代碼演示:
1 public static void main(String[] args) { 2 //創建非靜態內部類的對象 3 Test.TestInner tt=new Test().new TestInner(); 4 tt.show1(); 5 tt.show(); 6 tt.show2(); 7 //創建靜態內部類的對象 8 Test.Test1Inner tt1=new Test.Test1Inner(); 9 tt1.show();10 //直接調用靜態內部類中的靜態方法11 Test.Test1Inner.show1();12 13 Test tn=new Test();14 tn.show();//驗證局部內部類15 tn.show1();//驗證匿名內部類16 }17 18 }19 class Test{20 int a=1;21 public void show(){22 final int a=90;23 System.out.println("Test show a:"+a);24 new TestInner().show();//外部類非靜態方法訪問非靜態內部類中的方法25 //局部內部類,調用方法中的局部變量要被final修飾26 class MethodClass{27 public void show1(){28 System.out.println("Test show1 MethodClass show1 a:"+a);29 }30 }31 new MethodClass().show1();32 }33 public void show1(){34 //匿名內部類,直接在對象后使用其重寫的方法,調用方法中的局部變量要被final修飾35 final int a=80;36 new Test2(){37 @Override38 public void show() {39 System.out.println("大家好,這里是Test類中的show1方法中繼承了Test2抽象類的匿名內部類..."+a);40 }41 42 }.show();43 }44 //普通內部類45 class TestInner{46 int a=2;47 public void show(){48 System.out.println("TestInner show a:"+a);49 }50 public void show1(){51 System.out.println("Test TestInner show1----:");52 Test.this.show();//非靜態內部類訪問所屬外部類的非靜態方法53 } 54 public void show2(){55 System.out.println("Test TestInner show2----:");56 new Test.Test1Inner().show();//非靜態內部類訪問所屬外部類的靜態類的方法57 }58 }59 //靜態內部類60 static class Test1Inner{61 static int a=9;62 public void show(){63 new Test().new TestInner().show();//靜態內部類調用非靜態內部類中的方法64 }65 public static void show1(){66 System.out.println("Test Test1Inner show1 a:"+a);67 }68 }69 }70 abstract class Test2{71 public abstract void show();72 }
初學者難免錯誤,歡迎評判指教,持續更正ing...........
ASP.Net+Android+IOS開發 、Net培訓、期待與您交流!
新聞熱點
疑難解答