1、什麼叫做物件導向?
物件導向(Object-Oriented,簡稱OO)就是一個常見的程式結構設計方法。
物件導向思想的基礎是將相關的資料和方法放在一起,組合成一種新的複合資料類型,然後使用新建立的複合資料類型作為專案的基礎。
物件導向是一個很抽象的概念,它相對面向過程而言。
過程與物件都是一種解決問題的想法。
面向過程:強調的是功能行為,一種過程,先幹啥,再幹啥;
物件導向:將功能封裝到物件裡,強調的是具備某功能的物件;
依照物件導向的思想,可以把任何的東西看做物件!
物件導向的三個特徵:
封裝(Encapsulation);
繼承(Inheritance);
多型( Polymorphism)。
我的總結:
面向過程:強調的是具體的功能實現;(執行者)
物件導向:強調的是具備功能的物件。 (管理者)
2、類別
類別(class)是Java 語言的最小程式單位,也是設計與實作Java 程式的基礎,本部分將深入介紹類的相關知識。
類別的概念
類別是一組事物共有特徵和功能的描述。類別是對於一組事物的總體描述,是按照物件導向技術進行設計時最小的單位,也是組成專案的最基本的模組。類別的概念是抽象的,類似於建築設計中的圖紙,是對於現實需要代表的具體內容的抽象。類別只包含框架結構,而不包含具體的資料。所以類別代表的是總體,而不代表某個特定的個體。
我的總結:類別是抽象的,物件是具體的,實實在在的!
類別的定義:
[修飾符] class 類別名稱{
1~n個建構方法;
0~n個欄位;
0~n個方法
}
定義類,其實就是在定義類別裡面的物件
物件包含:
狀態; (屬性)
功能、行為;(方法)
透過類別來描述物件;
狀態--------成員變數;
功能、行為-方法;
Eg:
class Person{ //属性 private String name; private int age; private int sal; //方法 public void show(){ System.out.println("个人情况:"+name+age+sal); } }
3、建構方法
##建構方法:用來建構類別的實例(每一個類別都預設有一個無參的建構方法,得使用new呼叫)欄位:類別或物件所包含的數據,對類別狀態的一種描述;方法:類別或物件的特徵或行為作用:給類別中的欄位進行初始化,可以用來建立物件。 特點:方法名稱與類別名稱相同不用定義回傳值類型不需要寫return語句注意:
預設建構方法的特性。 多個建構方法是以重載的形式存在的。 建構方法的重載:(需要哪一個就去適配哪個,呼叫哪個)this([實參]);呼叫目前類別的建構方法#注意: this([實參]);必須放在建構器的第一行;
物件的產生格式:
類名稱 物件名稱= new 類別名稱();因為有(),所以是方法,實際上它就是建構方法,且是非私有的建構方法。 如:CellPhone cp = new CellPhone();
Eg: class Person{ private String name; private int age; private int sal; public void show(){ System.out.println("个人情况:"+name+age+sal); } public Person(String name) { super(); this.name = name; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person(String name, int age, int sal) { super(); this.name = name; this.age = age; this.sal = sal; } }
4、static關鍵字#
特點:
隨著類別的載入而載入
#優先於物件存在
被所有物件所共享
可以直接被類別名稱呼叫
使用注意:
靜態方法只能存取靜態成員
但是非靜態成員方法可以存取靜態成員;
靜態方法中不可以使用this,super關鍵字
主方法(main)是靜態的(可以利用類別名稱去呼叫靜態的main方法,很正常!但是會陷入死循環,導致記憶體溢出,jvm自動停止!)
public static void main(String[] agrs){}
#可修飾欄位,方法。
用static 修飾的成員表示它屬於這個類別共有,而不是屬於該類別的單一實例。
### static 修飾的字段欄位###### #不屬於類。 ###### 以沒有static 修飾的欄位== 執行個體欄位###### 選擇與方法的語法:######存取類別成員: 類別.欄位 類別.方法######存取實例成員: 實例.欄位 ##:######static 修飾的欄位和方法,既可以透過類別調用,也可以使用實例調用;######沒static 修飾的欄位和方法,只能使用實例來調用(建議使用:類別名稱來呼叫; 其實在底層,物件呼叫類別成員,也會轉換類別名稱呼叫)######static關鍵字不能與this,super同時連用! ##################5、匿名物件#########一個沒有名字的物件, 創造了一個物件出來,沒有賦給一個變數;# ##############特點:######對方法或欄位只進行一次呼叫時;######可作為實際參數傳遞;###### #只在堆裡面開闢儲存區域,#########只能使用一次, 使用完就被銷毀了;#########何時使用?只拿來用一次! ! ######new Person();表示匿名物件,沒有名字的物件###new Person().age = 17;//使用一次之后就被销毁了
6、this关键字
特点:this表示当前对象。
当前对象 ←→ 当前正在调用实例成员的对象
换言之:谁调用了方法,谁就是当前对象。
什么时候使用this关键字呢?
方法间的相互调用;
this.字段;
构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。
this不能用在static修饰的方法里和static修饰的代码块里;
Eg:构造方法中的this.name = name;
7、面向对象之封装
封装的两个含义:
1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;
封装机制在程序中的体现是:
把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。
程序中的一种体现:
通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
boolean 类型的变量没有getXX,只有 isXX;
Eg: class Person1{ private String name; private int age; private int sal; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
8、访问修饰符
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类;
总结:
9、類別的設計分析
#分析想法:
根據要求寫出類所包含的欄位;
所有的欄位都必須私有化;
封裝之後的欄位可透過setter和getter設值和取得;
依需求可加若干建構方法;
根據需求可加入對應的方法;
類別中的所有方法都不要直接處理(輸出列印),而是交給呼叫者去處理。
10、物件導向之繼承
#首先有反映一般事物特性的類別,然後在此基礎上反映出特殊事物的類;
也就是說:繼承是一種從一般到特殊的關係;
##特徵:
1、提高了程式碼的複用性。 2、讓類別與類別之間產生關係,有了這個繼承關係才有了多態的特性。 3、Java語言中只支援單繼承(有別於C語言)。 因為多重繼承容易帶來安全隱患(父類別多了, 功能相同的話,就會出現呼叫不確定性嗎,覆寫一個方法,到底覆寫的誰的?)。ps:介面可以實作多重繼承
4、Java支援多層繼承,object是每個類別的超類,實作樹形結構。 我的總結:繼承是多態的前提。 對類別而言,只支援單繼承。格式: [修飾符] class SubClass extends SuperClass
依照這個關係,我們把SuperClass類別稱為父類別或基底類,把SubClass稱為子類別或衍生類別或拓展類別;
主要是以父類別為基礎,然後新增屬於自己的欄位和方法。 父類別的私有成員子類別不能繼承到;父類別的建構方法不能被繼承;Java只支援單繼承,不支援多重繼承;/ /不然的話,例如show方法,繼承了多個,不知道到底呼叫那一個。 一個類別有且只有一個直接父類別;一個類別沒顯示的繼承其他的一個類別的時候,預設的直接父類別就是Object類別;# Student 的直接父類別是Person,Object類別也是Student類別的父類別,但是是間接父類別;一旦一個類別顯示的繼承了其他的一個類別的時候,此時預設的直接父類Object就會被取消;Java裡一個類別只能有一個直接父類別;
java.lang.Object是所有類別的父類,Object要嘛是直接父類別要嘛是間接父類。
子類別物件實例化過程
在繼承操作中,對於子類別物件的實例化:
子類別物件在實例化之前必須先呼叫父類別中的構造方法之後再呼叫自身的構造方法。
以上是本片文章的部分內容,後續會繼續為大家整理物件導向知識。不對的地方請指出,謝謝!
更多相關問題請上PHP中文網:JAVA影片教學
#以上是java-物件導向詳細介紹(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!