1. 程式人生 > 其它 >1.面向物件 oop

1.面向物件 oop

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;
}
}