編程思想:需求–》建立思路–》目標代碼
面向過程的思想:自頂向下 逐步求精
重點內容
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
創建子類對象要首先創建父類對象。
父類對象包含在子類對象當中。
所有的子類能夠訪問的父類屬性和方法,即是子類從父類中繼承的屬性和方法。