面向對象思想思想的三個特征:封裝,繼承,多態。
封裝:
表現:函數就是一個最基本的封裝體,類也是一個封裝體。
好處:1、提高了代碼的復用性,
2、隱藏了實現細節,可以對外提供可以訪問的方法,便于調用者的使用。
3、提高了安全性。
下面通過私有化(private)來對封裝進行理解:
class Person
{
//屬性:
private int age;? ? //age被修飾為了私有
//行為:
void speak()
{
System.out.println("age="+age);
}
}
年齡已被私有,錯誤的值無法賦值,可是正確的值也賦值不了,需要提供訪問方式。
對變量的訪問操作有兩個動作:賦值(設置 set),取值(獲取 get)
所以,對私有的變量訪問的方式就是 setAge? getAge
//定義對age賦值的方法。
void setAge(int a)
{
age = a;
}
//定義一個獲取age值得方法。
int getAge ()
{
return age;
}(以后再描述事物,屬性都私有化,并提供setXxx? getXxx方法對其進行訪問。)
記住:私有僅僅是封裝的體現形式而已。
構造函數:
為了描述事物更準確,發現事物對應的很多對象一創建時,就有了一些初始化的數據。這需要通過“構造函數來完成”。
構造函數怎么在代碼中體現?
1、沒有返回值類型。因為構造對象,創建完就結束,不需要結果,void也不要寫,。
2、構造函數名稱和類名一致。
3、沒有具體的返回值。
在Person類中定義一個構造函數
class Person
{
//屬性:姓名,年齡。
private String name;
private int age;
//一初始化,既沒有姓名,又沒有年齡。
Person()
{
}
//定義構造函數,對象一創建就具備姓名。
Person(String n)
{
//將接收到的值賦值給對象的name
name = n;
}
//一初始化既有姓名,又有年齡。
Person(String n,int a)
{
name = n;
age = a;
}
//行為。
public void speak()
{
System.out.println("name="+name+",age="+age);
}
}
class PersonDemo2
{
public static void main(String[] args)
{
Person p = new Person("lisi");//對象創建時,必須會調用對應的構造函數,因為對象需要初始化。
//? ? ? ? Person p2 = new Person("wangwu",23);
}
}
構造函數的細節: 1,一個類中可以有多個構造函數,它們的存在是以重載的形式體現的。 2,構造函數中也是有return語句的,用于結束初始化動作的。 3,構造函數是否能被private修飾呢?能,作用:其他程序無法創建該類的對象。
構造函數和一般函數的區別? 1,寫法不一樣。 2,運行上有差別,對象一創建就會調用對應的構造函數。 一般方法是對象創建后,才會調用所需的一般函數。 問:有了構造函數初始化姓名,那么還需要setName方法嗎? 需要,因為對象創建后,如果需要對數據進行修改,可以通過set完成。 3,構造函數在對象創建時,僅調用一次(初始化動作只做一次,而且先執行)。
一般方法可以被對象調用多次。