天天看點

黑馬程式員.bobo.DAY.5

------- android教育訓練、java教育訓練、期待與您交流! ----------

DAY-5

1.面向對象(概述)

1.1了解面向對象

面向對象是相對面向過程而言

面向對象和面向過程是一種思想

面向過程

強調的功能行為

面向對象

将功能封裝進對象,強調具備了功能的對象.

面向對象是基于面向過程的.

2.面向對象(舉例)

不懂

3.面向對象(類與對象的關系)

//面向對象:三個特征:封裝,繼承,多态.
//以後開發:其實就是找對象試用,沒有對象,就建立一個對象
//找對象,履歷對象,使用對象,維護對象的關系
/*
類和對象的關系.
現實生活中的對象:張三 李四.
想要描述:提取對象中共性内容,對具體的抽象.
描述時:這些對象的共性有:姓名,年齡,性别,學習Java功能.
 
映射到Java中,描述就是class定義的類.
具體對象就是對應Java在堆記憶體中用new建立實體.
 
類就是:對現實生活中事物的描述.
對象:就是這類事物,實實在在存在個體
*/
 
//需求:描述汽車(顔色,輪胎數).描述事物其實就是在描述事物的屬性和行為.
//屬性對應是類中變量,行為對應的類中的函數(方法)
//其實定義,就是在描述事物,就是在定義屬性和行為.屬性和行為共同成為類中的成員(成員變量和成員方法)
class Car
{
//描述顔色
String color = "顔色";
//描述輪胎數
int num = 4;
//運作行為
void run()
{
System.out.println(color+".."+num);
}
}
class charDemo
{
public static void main(String[] args)
{
//生産汽車.在Java中通過操作符來完成.
//其實就是在堆記憶體産生一個實體.
Car c = new Car();//c就是一個類類型變量.記住:類類型變量指向對象.
//需求:将已有的汽車的顔色改成藍色,指揮對象做使用.在java指揮方式是:對象.對象成員
c.color = "blue";
c.run();
Car c1 = new Car();
c1.run();//red 4;
}
}
           

4.面向對象(成員變量與局部變量)

5.面向對象(匿名對象的應用)

/

/面向對象:三個特征:封裝,繼承,多态.
//以後開發:其實就是找對象試用,沒有對象,就建立一個對象
//找對象,履歷對象,使用對象,維護對象的關系
/*
類和對象的關系.
現實生活中的對象:張三 李四.
想要描述:提取對象中共性内容,對具體的抽象.
描述時:這些對象的共性有:姓名,年齡,性别,學習Java功能.
 
映射到Java中,描述就是class定義的類.
具體對象就是對應Java在堆記憶體中用new建立實體.
 
類就是:對現實生活中事物的描述.
對象:就是這類事物,實實在在存在個體
*/
 
//需求:描述汽車(顔色,輪胎數).描述事物其實就是在描述事物的屬性和行為.
//屬性對應是類中變量,行為對應的類中的函數(方法)
//其實定義,就是在描述事物,就是在定義屬性和行為.屬性和行為共同成為類中的成員(成員變量和成員方法)
/*
成員變量和局部變量.
作用範圍.
成員變量作用域整個類中.
局部變量作用于函數中,或者語句中
在記憶體中的位置
成員變量:在堆記憶體中,因為對象的存在,才在記憶體中存在
局部變量:存在棧記憶體中
*/
class Car
{
//描述顔色
String color = "顔色";
//描述輪胎數
int num = 4;
//運作行為
void run()
{
System.out.println(color+".."+num);
}
}
class charDemo
{
public static void main(String[] args)
{
//生産汽車.在Java中通過操作符來完成.
//其實就是在堆記憶體産生一個實體.
Car c = new Car();//c就是一個類類型變量.記住:類類型變量指向對象.
//需求:将已有的汽車的顔色改成藍色,指揮對象做使用.在java指揮方式是:對象.對象成員
c.color = "blue";
c.run();
Car c1 = new Car();
c1.run();//red 4;
//Car c = new Car();
// c.num = 5;//這兩語句可以簡化
new Car().num = 5;//從新的對象修改num
new Car().color = "blue";//從新的對象修改color
new Car().run();//從新的對象執行run
//是以跟之前的沒有任何關系
Car c new Car();
c.run();
c.num = 4;
new Car().run();
//匿名對象使用方式一:當對對象的方法隻調用一次時,可以試用匿名對象來完成.
//如果對一個對象進行多個成員調用,必須給這個對象起個名字
//匿名對象私用方式二:可以将匿名對象作為實際參數進行傳遞
Car q = new Car();
show(q);
show(new Car());
}
public static void show(Car c)
{
c.num = 3;
c.color = "black";
c.run();
}
}
           

6.面向對象(封裝概述)

6.1封裝(Encapsulation)

封裝:是指隐藏對象的屬性和實作細節,僅對外提供公共通路方式.

好處:

将變化隔離

便于使用

提高重用性

提高安全性

封裝原則:

将不需要對外提供的内容給隐藏起來.

把屬性都隐藏,提供公共方法對其通路.

7.面對對象(封裝private)

/*
private: 私有,權限修飾符:使用者修飾類中的成員(成員變量,成員函數)
私有隻在本類中有效.
 
将age私有化以後,類以外即使建立了對象也不能直接通路
但是人應該有年齡,就需要在Person類中提供對應通路方式
 
注意: 私有僅僅是封裝的一種表現形式
之是以對外提供通路方式,就是因為可以在通路方式中加入邏輯判斷等語句,提高代碼健壯性.
 
 
*/
class Person
{
private int age;
public void setAge(int a)
{
if(a>0 & a<130)
{
age=a;
speak();
}
else
System.out.println("非法年齡值");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
//p.age = 20;
p.setAge(220);
//p.speak();
}
}
           

8.面向對象(構造函數)

/*
對象一建立就會調用與之對應的構造函數.
構造函數的作用:可以用于給對象進行初始化.
構造函數的作用:可以用于給對象進行初始化
 
構造函數的小細節:
當一個類中沒有定義構造函數時,那麼系統會預設給該類加入一個空參數的構造函數.
 
當在類中自定義了構造函數後,預設的構造函數就沒有了.
構造函數和一般函數在寫法上有不同.
 
在運作上也有不同.
構造函數是在對象一建立就運作,給對象初始化.
而一般方法是對象調用才執行,是給對象添加對象具備的功能
 
一個對象履歷,構造函數隻運作一次.
而一般方法可以被該對象調用多次.
什麼時候定義構造函數呢?
當分析事物時,該事物存在具備一些特性或者行為,那麼将這些内容定義在構造函數中
 
*/
class Person
{
private String name;
private int age;
Person()
{
System.out.println("A:name"+name+",,age"+age);
cry();
}
Person(String n)
{
name = n;
System.out.println("A:name"+name+",,age"+age);
cry();
}
public void setName(String n)
{
name = n;
}
public  String getName()
{
return name;
}
Person(String n,int a)
{
name = n;
age = a;
System.out.println("A:name"+name+",,age"+age);
cry();
}
public void cry()
{
System.out.println("cry......");
}
}
class PersonDemo2
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.cry();
Person p2 = new Person("lyb");
p2.setName("bobo");
System.out.println(p2.getName());
Person p3 = new Person("lyb",20);
 
}
}
           

9.面向對象(構造代碼塊)

/*
構造代碼塊.
作用:給對象進行初始化.
對象一建立就運作,而且優先于構造函數執行.
和構造函數的差別:
構造代碼塊是給所用對象進行統一初始化.
而構造函數是給對應的對象初始化.
構造代碼塊中定義的是不同對象共性的初始化内容
*/
{
System.out.println("person code run");
}
           

10.面向對象(this關鍵字)

11.面向對象(this關鍵字的應用)