1.面向物件 oop
1.面向物件思想
*· 物以類聚,分類的思想模式,思考問題首先會解決問題需要哪些分類,然後對這些分類
進行單獨思考.最後.才對某個分類下的細節進行面向過程的思索
*·面向物件適合處理複雜的問題,適合處理需要多人協作的問題
對於描述複雜的事物,為了從巨集觀上把握,從整體合理分析,我們需要使用面向物件的思路來分析整個系統.但是具體到微觀操作,仍然需要面向過程的思路去處理
面向物件程式設計的本質就是:以類的方式組織程式碼,以物件的組織(封裝)資料.
抽象
*封裝
*繼承
*多型
從程式碼執行角度考慮是先有類後有物件. 類是物件的模板.
package 面向物件;
//oop 類
public class oop1 {
public static void main(String[] args) {
int max=max(10,20);
System.out.println(max);
}
/*
* 修飾符 返回值 方法名(...){
* 方法體
* return 返回值;
* }
*/
public String Hello(){
return "Hello";
}
public static int max (int a , int b ) {
if (a>b){
return a;
} else return b;
}
} // void 返回值為空
1.呼叫
靜態方法可以直接呼叫 類名. 方法名
1.非靜態
如果他倆同為 static可以呼叫
如果一個是static 一個 不是static 則不可以呼叫
static是和類一起載入的 B 是例項化之後才存在的
2.形參和實參
package 面向物件;
public class oop3 {
public static void main(String[] args) {
int sum= (int) sum(20,30);
//實際參與的數字就是實參
System.out.println(sum);
}
public static double sum (int C , int D) {
//形式設計的 數值就是形式引數
return C+D;
}
}
3.值傳遞
package 面向物件;
//值傳遞
public class oop4 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
oop4.change(a);
System.out.println(a);
}
public static void change(int a) {
a =10;
}
}
4.引用傳遞**
package 面向物件;
//引用傳遞:物件 ,本質還是直傳遞
public class oop5 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//null
oop5.change(person);
System.out.println(person.name);//小學生
}
public static void change(Person person) {
person.name ="小學生";
}
}
//定義一個person類, 有一個屬性:name
class Person{
String name;
}
2.類和物件的關係
1.類是一種抽象的資料型別,它是對某一類事物整體的描述/定義,但是並不能代表某一具體的事物
2.物件是抽象概念的具體例項
能夠體現出特點,展現出功能的是具體的實列,而不是一個抽象的概念
1.建立與初始化物件
1.使用 new 關鍵字建立物件
2.使用new關鍵字建立是時候,除了分配記憶體空間之外,還會給建立好的物件 進行預設的初始化 以及對類中構造器的呼叫
3.類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的.並且構造器有以下兩個特點.
1.必須和類的名字相同
2.必須沒有返回型別, 也不能寫void
package 面向物件;
//一個專案只能處在一個mian方法
public class Application {
public static void main(String[] args) {
// 類:抽象的 ,例項化
// 類實列化後會返回一個自己的物件!
//student物件就是一個Student類的具體實列
Student xiaohong = new Student();
Student xiaoming = new Student();
//student 他是一個類 不是具體的一個值
xiaoming.name="小明";
xiaoming.age=10;
System.out.println(xiaoming.name);
System.out.println(xiaoming.age);
}
}
package 面向物件;
//學生類
public class Student {
//屬性 :欄位
String name;//預設值 null //是一個抽象的概念一個模板
int age; //預設值 為0 //是一個抽象的概念一個模板
//方法
public void student(){
System.out.println(this.name + "學生說話了");
}
}
2.構造器
無參構造
先走new persion 在走public persion ---- this name ----在返回 給name
有參構造
new persion 定義了一個name 就走有參構造
Alt+ insert 生成構造器
構造器 :
1.和類名相同
2.沒有返回值
作用 :
1.new 本質在呼叫構造器
2.初始化物件的值
注意點
1.定義有參構造器之後,如果想使用無參構造,顯示的定義一個無參的構造
this. 標識這個類
後面this.= 什麼 表示傳進來的
3.建立物件記憶體分析
4.封裝
高內聚 低耦合
高內聚:就是類的內部資料作細節自己完成,不允許外部干涉
低耦合:僅暴露少量的方式給外部使用
封裝
通常,應禁止直接訪問一個物件中資料的實際表示 ,而應通過操作訪問,這稱為資訊隱藏
屬性私有
get / set
get
set
ALT + insert 只動生成get set 方法
封裝的意義
1.提高程式的安全性,保護資料
2.隱藏程式碼的實現細節
3.統一介面
4.增加了系統可維護
package 面向物件;
public class Application {
public static void main(String[] args){
Student student = new Student();
student.getName();
student.setName("小學生");
System.out.println(student.getName());
student.getAge();
student.setAge(70);
System.out.println(student.getAge());
}
}
package 面向物件;
//學生類
public class Student {
//private 屬性私有
private String name;
private int age;
private int ID;
//提供一些 可以操作這個屬性的方法
//提供一些 public 的get . set 方法
// get 獲得這個資料
public String getName() { //獲取值不能用void
return this.name;
}
// set 給這個資料設定值
public void setName(String name){
//括號裡要有呼叫的形勢引數
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>120 || age<0){
System.out.println("年齡不合法");
}else
this.age = age;
}
}