1. 程式人生 > >黑馬程式設計師--Java學習日記之面向物件(封裝,繼承和構造方法)

黑馬程式設計師--Java學習日記之面向物件(封裝,繼承和構造方法)

------- android培訓java培訓、期待與您交流! ----------

面向物件思想:
    面向過程,以函式為基礎,關注的是實現過程;
    面向物件,以物件為基礎,關注的是最終結果;

面向物件思想特點
        是一種更符合我們思想習慣的思想
        可以將複雜的事情簡單化
        將我們從執行者變成了指揮者
          角色發生了轉換

面向物件開發
      就是不斷的建立物件,使用物件,指揮物件做事情。
   面向物件設計
      其實就是在管理和維護物件之間的關係。
   面向物件特徵
      封裝(en  psul tion)
      繼承(inherit ne)
      多型(polymorphism)

面向物件(學生類的定義)

         案例演示

                   屬性:姓名,年齡,性別

   行為:學習,睡覺

class Test_Student {
	public static void main(String[] args) {
		//建立物件
		Student s = new Student();
		//物件名.變數名
		s.name = "張三";
		s.age = 23;

		System.out.println(s.name + "..." + s.age);
		//使用成員方法
		s.study();
		s.sleep();
	}
}
class Student {
	String name;						//姓名
	int age;							//年齡
	String gender;						//性別

	public void study() {				//定義學習的方法
		System.out.println("學生學習");
	}

	public void sleep() {				//定義睡覺的方法
		System.out.println("學生睡覺");
	}
}
成員變數和區域性變數的區別
 在類中的位置不同
     成員變數:在類中方法外
     區域性變數:在方法定義中或者方法宣告上
 在記憶體中的位置不同
     成員變數:在堆記憶體(成員變數屬於物件,物件進堆記憶體)
     區域性變數:在棧記憶體(區域性變數屬於方法,方法進棧記憶體)
 生命週期不同
     成員變數:隨著物件的建立而存在,隨著物件的消失而消失
     區域性變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失
 初始化值不同
     成員變數:有預設初始化值
     區域性變數:沒有預設初始化值,必須定義,賦值,然後才能使用。

 封裝概述
     把同一型別的物件的共同的屬性和行為放到一個類裡面,就是封裝的過程。具體實現方式是隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。

 封裝好處
     隱藏實現細節,提供公共的訪問方式
     提高了程式碼的複用性
     提高安全性。
 封裝原則
     將不需要對外提供的內容都隱藏起來。
     把屬性隱藏,提供公共方法對其訪問。

privte關鍵字的概述和特點
 人類賦值年齡的問題
 privte關鍵字特點
     是一個許可權修飾符
     可以修飾成員變數和成員方法
     被其修飾的成員只能在本類中被訪問
 案例演示
     封裝和privte的應用:
     把成員變數用privte修飾
     提供對應的getXxx()和setXxx()方法
     privte僅僅是封裝的一種體現形式,不能說封裝就是私有
class Test_Person {
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.name = "張三";			//呼叫姓名屬性並賦值
		//p1.age = -17;				//呼叫年齡屬性並賦值
		//p1.speak();					

		p1.setAge(-17);

		System.out.println(p1.getAge());
	}
}

class Person {
	String name;					
	private int age;				
	
	public void setAge(int a) {		
		if (a > 0 && a < 200) {
			age = a;
		}else {
			System.out.println("錯誤");
		}
		
	}

	public int getAge() {			
		return age;
	}

	public void speak() {
		System.out.println(name + "..." + age);
	}
}

 this關鍵字特點
     代表當前物件的引用(代表本來物件的引用/指代) 
     this的本質是一個物件
     在每一個普通方法裡,都有一個this,誰呼叫這個方法,this就指向誰

構造方法的過載及注意事項

 構造方法的過載

     過載方法名相同,與返回值型別無關(構造方法沒有返回值),只看引數列表

構造方法注意事項
     如果我們沒有給出構造方法,系統將自動提供一個無參構造方法。
     如果我們給出了構造方法,系統將不再提供預設的無參構造方法。
         注意:這個時候,如果我們還想使用無參構造方法,就必須自己給出。建議永遠自己給出無參構造方法

 案例演示
     學生類:
         成員變數:
             name,age
         構造方法:
             無參,帶兩個參
         成員方法:
            getXxx()/setXxx()
             show():輸出該類的所有成員變數值
 給成員變數賦值:
     setXxx()方法
     構造方法
    
 輸出成員變數值的方式:
     通過getXxx()分別獲取然後拼接
     通過呼叫show()方法搞定


class Demo4_Student {
	public static void main(String[] args) {
		Student s1 = new Student();					//使用空參構造
		s1.setName("張三");							//設定姓名
		s1.setAge(23);								//設定年齡

		System.out.println("我的姓名是:" + s1.getName() + ",我的年齡是:" + s1.getAge());
		//getXxx()獲取屬性值,可以列印,也可以賦值給其他的變數,做其他的操作
		Student s2 = new Student("李四",24);
		s2.show();									
	}
}
class Student {
	private String name;							
	private int age;								

	public Student(){}					//空參構造

	public Student(String name,int age) {			//有參構造
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {				
		this.name = name;
	}

	public String getName() {						
		return name;
	}

	public void setAge(int age) {					
		this.age = age;
	}

	public int getAge() {							
		return age;
	}

	public void show() {
		System.out.println("我的姓名是:" + name +  ",我的年齡是:" +  age);
	}
}

 繼承(extens)
     讓類與類之間產生關係,子父類關係 
繼承的好處和弊端
 繼承的好處
     提高了程式碼的複用性
     提高了程式碼的可維護性
     讓類與類之間產生了關係,是多型的前提
 繼承的弊端
     類的耦合性增強了。
    
     開發的原則:高內聚,低耦合。
     耦合:類與類的關係
     內聚:就是自己完成某件事情的能力

 繼承的注意事項
     子類只能繼承父類所有非私有的成員(成員方法和成員變數)
     子類不能繼承父類的構造方法,但是可以通過super(馬上講)關鍵字去訪問父類構造方法。
     不要為了部分功能而去繼承
 繼承案例演示:
     動物類,貓類,狗類
     定義兩個屬性(顏色,腿的個數)兩個功能(吃飯,睡覺)
 案例演示
     使用繼承前
 案例演示
class Test5_Animal {
	public static void main(String[] args) {
		Cat c1 = new Cat("花",4);
		System.out.println(c1.getColor() + "..." + c1.getLeg());
		c1.eat();
		c1.catchMouse();

		Dog d1 = new Dog("黑",2);
		System.out.println(d1.getColor() + "..." + d1.getLeg());
		d1.eat();
		d1.lookHome();
	}
}
/*
* A:貓狗案例分析
* B:案例演示
	* 貓狗案例繼承版
	* 屬性:毛的顏色,腿的個數
	* 行為:吃飯
	* 貓特有行為:抓老鼠catchMouse
	* 狗特有行為:看家lookHome
*/

class Animal {
	private String color;					//毛的顏色
	private int leg;						//腿的個數

	public Animal(){}

	public Animal(String color,int leg) {
		this.color = color;
		this.leg = leg;
	}

	public void setColor(String color) {	//設定顏色
		this.color = color;
	}

	public String getColor() {				//獲取顏色
		return color;
	}

	public void setLeg(int leg) {			//設定腿的個數
		this.leg = leg;
	}

	public int getLeg() {					//獲取腿的個數
		return leg;
	}

	public void eat() {						//吃飯
		System.out.println("吃飯");
	}
}

class Cat extends Animal {
	public Cat() {}							//空參構造

	public Cat(String color,int leg) {		//有參構造
		super(color,leg);
	}

	public void eat() {						//吃魚
		System.out.println("貓吃魚");
	}

	public void catchMouse() {				//抓老鼠
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal {
	public Dog() {}							//空參構造

	public Dog(String color,int leg) {		//有參構造
		super(color,leg);
	}

	public void eat() {						//吃肉
		System.out.println("狗吃肉");
	}

	public void lookHome() {				//看家
		System.out.println("看家");
	}
}


相關推薦

黑馬程式設計師--Java學習日記面向物件(封裝,繼承構造方法)

------- android培訓、java培訓、期待與您交流! ---------- 面向物件思想:     面向過程,以函式為基礎,關注的是實現過程;     面向物件,以物件為基礎,關注的是最終結果; 面向物件思想特點         是一種更符合我們思想習慣的思想

黑馬程式設計師--Java學習日記GUI&網路程式設計

------- android培訓、java培訓、期待與您交流! ---------- GUI 如何建立一個視窗並顯示  Graphical User Interface(圖形使用者介面)。   

黑馬程式設計師--Java學習日記基礎知識(思維導圖&基礎概念)

------- android培訓、java培訓、期待與您交流! ---------- 什麼是常量      在程式執行的過程中其值不可以發生改變  Java中常量的分類    

黑馬程式設計師_Java學習日記2_面向物件總結1

----------------------android培訓、java培訓、期待與您交流! --------------------- 1.關於main函式的講解 主函式,是一個特殊的函式,作為程式的入口,可以被jvm呼叫。 主函式的定義: public:代表該函式的許

黑馬程式設計師----Java基礎面向物件(封裝 繼承 多型)(二)

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

黑馬程式設計師----Java基礎面向物件(封裝 繼承 多型)

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

黑馬程式設計師----Java基礎基礎IO流

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

黑馬程式設計師_Java學習日記25_高新技術4

----------------------android培訓、java培訓、期待與您交流! --------------------- 泛型 1.入門泛型的基本應用 JDK1.5的集合類希望你在定義集合時,明確表示你要向集合中儲存哪種型別的資料,無法加入指定型別以外的

黑馬程式設計師_學習日記六_集合一

---------------------- android培訓、java培訓、期待與您交流! ----------------------  集合框架(集合類)體系概述      集合類:面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個類物件進行操作,就對

黑馬程式設計師——java的IO字元流,位元組流,轉換流

------- android培訓、java培訓、期待與您交流! ---------- 前言:通過觀看畢向東老師的java基礎視訊,查漏補缺,將一些自己掌握的還不牢固的知識寫出來,希望和大家交流分享。 1.IO概述 1、相關概念:IO:即Input和Output的縮寫。

黑馬程式設計師_Java學習筆記7K面試題交通等管理系統

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">

黑馬程式設計師——java基礎拾遺多執行緒(二) 執行緒同步、執行緒通訊

執行緒安全的概念:當多個執行緒同時執行一段程式碼時,如果結果和單執行緒執行時一致,而且其他變數也和預期的一致,說明是這段程式碼是執行緒安全的。但是,多執行緒執行的過程中會出現單執行緒時候不會出現的問題,大多出現在多個執行緒同時操作全域性變數或者靜態變數的時候。當出現這種

黑馬程式設計師——Java語言基礎陣列

八、陣列            1、定義:同一種資料型別的集合,其實質就是一個容器。            2、好處:自動給陣列的元素從0開始編號,方便操作。            3、格式1: 元素型別[ ]  陣列名= new 元素型別 [元素的個數或者陣列的長度] ;                

黑馬程式設計師——java面試題基礎語法

型別轉化 float f1 = (float)12.345; float f2 = 12.345f; f1其實是通過一個double型別轉換過來的。 而f2本身就是一個flo

黑馬程式設計師——java學習的開端

寫在前面的話 接觸java也已經一年多了,斷斷續續的學習了一段時間,始終沒有進行一個系統的學習。直到接觸到了黑馬之後,接觸到了畢老師的視訊講課,才發現原來學習,還可以這麼的有趣。畢老師的課真的講的好好,感覺不是在聽課,而是在聽故事。樣的學習氛圍,相信沒有人

程式設計師Java學習路線Java中的物件序列化

好程式設計師Java學習路線之Java中的物件流和序列化,最近,在講流的使用,其中物件流的作用其實就是將自定義類的物件與流之間相互

JAVA學習筆記面向物件(一)

        作為初入開發的萌新,我根據黑馬程式設計師的教學視訊和課件整理總結,記錄下自己的JAVA學習,方便鞏固和交流。每篇筆記首先回顧知識點,然後貼上程式碼和執行結果,最後進行小結。若有不正之處或者有疑問,歡迎指出,望與各位共同進步。1.類的定義修飾符    class

Java學習心得面向物件(二)

 引用型別和基本型別有著巨大的區別,當宣告一個int  i=0時,系統會馬上給這個i分配一個記憶體空間(在棧記憶體裡面分配一小塊區域用來裝數字0),裡面裝著一個值為0,以後使用i這個名字馬上就可以訪問這個記憶體空間裡面的值,這就是基本資料型別,所以基礎型別就只佔一塊記憶體。基礎型別之外的型別全都叫引用型別,

Java學習心得面向物件(一)

一、面向過程的思想和麵向物件的思想  面向物件和麵向過程的思想有著本質上的區別, 作為面向物件的思維來說,當你拿到一個問題時,你分析這個問題不再是第一步先做什麼,第二步再做什麼,這是面向過程的思維,你應該分析這個問題裡面有哪些類和物件,這是第一點,然後再分析這些類和物件應

黑馬程式設計師-IOS學習筆記(二)常用關鍵字方法

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!------- 常用關鍵字和方法: 一.記憶體管理情況 1- autorelease,當用戶的程式碼在持續執行時,自動釋放池是不會被銷燬的,這段時間內使用者可以安全地使用自動釋放的物件。當