java---面向對象

編程思想:需求–》建立思路–》目標代碼

面向過程的思想:自頂向下 逐步求精
重點內容
1、編程思想:面向對象
SmallTalk
對象:一切客觀存在的事物。
C面向過程—-C++ (面向過程和麪向對象)
java 純面向對象
屬性:有什麼
方法:能做什麼
對象的屬性有可能又是一個對象。
對象的方法的使用者又是一個對象。

任何對象都會有自己的方法,給別的對象用。

客觀世界是由對象組成的
1)小對象組成大對象。
2)對象間彼此方法調用。

解決客觀問題:面向對象的思想
1)把解決問題所需要的對象。
2)對象間如何配合,完成需求。

計算機需求 來源於 客觀世界
解決計算機問題,同樣可以採用面向對象的思想。

計算機中的對象:
JVM中連續的存儲空間(數據)
代表生活中的對象,生活中的對象在計算機中的抽象

各司其職 對象應該保持簡單性
弱耦合性 對象和對象之間的聯繫應該儘量弱化
可重用性
可擴展性

2、類:
1)對象共性的抽象
2)客觀對象在人腦中的主觀反應,類人對對象的認識。
3)類是對象的模版

如何編寫一個類
屬性:實例變量
1)有默認值 數值類型:0 布爾類型:false 對象類型:null
2)作用範圍:至少是全類的內部
3)可以與局部變量發生命名衝突,衝突的時候局部優先

局部變量:先賦值後使用。定義在方法中,範圍定義開始,到定義改變量的代碼塊

3、方法:
方法的聲明:對象能做什麼
修飾符 返回值類型 方法名(參數表) 拋出的異常
方法的實現:對象怎麼做

重載(OverLoad)與覆蓋(OverRide)
方法的重載:
1)參數的個數不同
2)參數的類型不同
3)參數類型的排序不同
形參名不同,不算重載

由編譯器在程序編譯的時候,根據實參的類型選擇一個合適的方法調用。 編譯時多態。
向上就近類型匹配原則 避免混淆情況。
方法重載決定取決於編譯器。
上面是面試
作用:
讓一個對象的同類方法,由於參數表的不同造成的差異,對用戶屏蔽。

構造方法:
1)沒有返回值類型
2)方法名必須和類名相同
3)不允許手工調用,在對象構造過程中自動調用一次

類寫完是構造對象用的。
如果一個類沒有定義任何構造方法,系統會默認添加一個公開的無參的構造方法。

構造方法在創建對象的時候用。
對象的創建過程:
1)分配空間 所有的實例變量被賦予默認值。
2)初始化屬性 所有的實例變量被賦予初始值。
3)調用某一個構造方法 實例變量常常被第三次賦值。

構造方法經常是用來給屬性賦值

4、創建對象
對象是數據,裝在變量裏。

Student s1=new Student("L",35,50);
Student s2=new Student();

難點
簡單變量:存值 對象變量(引用) :存對象的地址 看變量類型
實例變量 局部變量 看位置
5、引用
對象變量(引用) :存對象的地址 ,引用指向了一個對象,來判斷 。

package day1;
public class TestReference{
public static void main(String[] args){
/*int a=10;
int b=a;
b++;
System.out.println(a);
*/
/*Student s1=new Student();
Student s2=s1;
s2.age++;
System.out.println(s1.age);//21
*/
int m=10;
changeInt(m);
System.out.println(m);//10
}
static void changeInt(int a){
    a++;
}
}
class Student{
int age=20;

}

6、this 關鍵詞
1)引用 當前對象 你對誰調方法,誰就是當前對象。
當實例變量和局部變量命名衝突的時候,用this.表示實例變量。
2)用在構造方法中 this(…)調用本類的其他構造方法。this.()必須在類的第一個語句上。

有參構造方法中去調用無參構造方法
構造方法不能手工調用
this()

package chp5;
public class TestThis{
public static void main(String[] args){
    /*Teacher t1=new Teacher();
    t1.name="Huxz";
    Teacher t2=new Teacher();   
    t2.name="liucy";
    t1.print();
    t2.print();
    */
    new Teacher("Hxz");
}
}
class Teacher{
String name;
public void print(){
    String name="Zhang3";
    System.out.println(this.name);
    System.out.println(name);
}
public Teacher(){
    System.out.println("Teacher()");

}
public Teacher(String name){
    this();
    this.name=name;
}
}
clss Worker{
    String name;
    int age;
    double salary;
    boolean gender;
    publin Worker(String name,int age,double salary){
        this.name=name;
        this.age=age;
        this.salary=salary;
}
   publin Worker(String name,int age,double salary,boolean gender){
        this(name,age,salary);
        this.gender=gender;
   }
}

**chp6 三大特性
封裝 繼承 多態
7、封裝:**

對象的邊界對對象的內部起到保護的作用:
數據隱藏
public 公開的 不受邊界的約束
private 私有 只能在本類內部訪問 無法突破邊界
屬性私有 提供公開的setXXX/getXXX用來訪問屬性
方法私有 只給自己調用
方法公開:聲明公開 實現隱藏
實現的改變對架構的影響最小
數據左移一位與數據*2是一樣的
a*2 a<<1

package chp6;
public class TestEncapsulation{
  public static void main(String[] args){
     CreditCard card=new CreditCard();
     System.out.println(card.getPassword());
     //card.password="1234";
     card.setPassword("1234");
     //card.password="1234";
     //card.password="654321";
     System.out.println(card.getPassword());
  }
}
class CreditCard{
  private String password="123456";
  public String getPassword(){
       return password;
  }
  public void setPassword(String password){
      if(password.length()!=6)return;
      this.password=password;
  }
}

8、繼承
父類–子類 一般–特殊 父類:子類的共性抽象出來
動物 狗 貓
關鍵字 extends
創建子類對象要首先創建父類對象。
父類對象包含在子類對象當中。
所有的子類能夠訪問的父類屬性和方法,即是子類從父類中繼承的屬性和方法。

發佈了36 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章