黑馬程式設計師--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,當用戶的程式碼在持續執行時,自動釋放池是不會被銷燬的,這段時間內使用者可以安全地使用自動釋放的物件。當