第1章 面向對象java
1.1 知識回顧編程
1.Java中的數據類型
2.引用數據類型String中的方法
3.IO流_讀寫文件數組
1.2 面向對象概念回顧學習
什麼叫面向對象編程?有人是這麼理解的測試
也有人說不對,面向對象編程是你要編程你對象也要編程.this
面向對象簡稱:「OOP」 面向對象編程spa
使用類映射現實生活中的事物,其功能封裝爲方法,屬性封裝爲成員變量。
一個類擁有的成員包括:
成員變量
構造方法
普通方法
getters/setters設計
如一個Person類的定義:
class Person{
private String name;
private int age;code
public Person(){} public Person(String name,int age) { this.name = name; this.age = age;
}對象
public void showName() { System.out.println(this.name); } set/get方法
}
1.3 對象的內存解釋
對象在內存中的位置:
對象由new關鍵字建立,如同數組,實體存在於堆內存中
任何事物都可以定義成類,建立對象,屬於引用類型
而對象的引用變量是一個普通變量。存儲的值是該對象堆內存中的地址。
基本類型賦值代碼解釋
基本類型賦值對應內存圖
引用類型賦值代碼解釋
引用類型賦值對應內存圖
1.4 this關鍵字概念
this通常出如今類的一個方法當中,表明當前對象的引用。咱們一般用其將本對象中的成員與其餘做用域區分開來。
咱們用代碼回顧一下 this關鍵字的做用,用來區分紅員變量和局部變量同名狀況
當一個類定義好以後,若是不建立對象this是沒有意義的。
一個類能夠有多個對象。每一個對象都有各自的屬性值,各個對象的方法均是類中定義的那個方法邏輯。定義中的this就表明調用方法的這個對象。
1.5 匿名對象
1.5.1 匿名對象的概念
匿名: 不露身分、我的特徵或不說明是什麼人物
生活中有哪些匿名案例?
匿名帳號
匿名舉報
匿名對象
匿名對象是指建立對象時,只有建立對象的語句,卻沒有把對象地址值賦值給某個變量。
如:已經存在的類:
public class Person{
public void eat(){
System.out.println();
}
}
建立一個普通對象
Person p = new Person();
建立一個匿名對象
new Person();
1.5.2 匿名對象的特色
建立匿名對象直接使用,沒有變量名。
new Person().eat() //eat方法被一個沒有名字的Person對象調用了。
匿名對象在沒有指定其引用變量時,只能使用一次。
new Person().eat(); 建立一個匿名對象,調用eat方法
new Person().eat(); 想再次調用eat方法,從新建立了一個匿名對象
匿名對象能夠做爲方法接收的參數、方法返回值使用
class Demo { publicstatic Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名對象做爲方法返回值 returnnew Person(); } publicstaticvoid method(Person p){} } class Test { publicstaticvoid main(String[] args) { //調用getPerson方法,獲得一個Person對象 Person person = Demo.getPerson(); //調用method方法 Demo.method(person); //匿名對象做爲方法接收的參數 Demo.method(new Person()); } }
第2章 繼承
2.1 繼承
2.1.1 繼承的概念
什麼叫繼承? 他是面向對象的三大特徵之一
現實生活中的繼承 QQ:5位 12345
在現實生活中,繼承通常指的是子女繼承父輩的財產。
在程序中,繼承描述的是類與類之間的關係,經過繼承能夠多個類之間造成一種關係體系。例如學校中的講師、助教、班主任都屬於員工。這些員工之間會造成一個繼承體系,具體以下圖所示。
圖1-1 員工繼承關係圖
在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱做子類,現有類被稱做父類,
繼承後子類的特色:
子類會自動擁有父類全部可繼承的屬性和方法。
思考:
現實生活中還有哪些繼承的例子?
2.1.2 繼承的定義及使用格式
在程序中,若是想聲明一個類繼承另外一個類,須要使用extends關鍵字。
格式:
class 子類 extends 父類 {}
接下來經過一個案例來學習子類是如何繼承父類的,以下所示。Example01.java
/* * 定義員工類Employee */ class Employee { String name; // 定義name屬性 // 定義員工的工做方法 publicvoid work() { System.out.println("全力以赴地工做"); } } /* * 定義講師類Teacher 繼承 員工類Employee */ classTeacherextends Employee { // 定義一個打印name的方法 publicvoid printName() { System.out.println("name=" + name); } } /* * 定義測試類 */ publicclass Example01 { publicstaticvoid main(String[] args) { Teachert = newTeacher (); // 建立一個講師類對象 t.name = "小明"; // 爲該員工類的name屬性進行賦值 t.printName(); // 調用該員工的printName()方法 t.work(); // 調用Developer類繼承來的work()方法 } }
運行結果以下圖所示。
圖1-2 運行結果
在上述代碼中,Teacher類經過extends關鍵字繼承了Employee類,這樣Teacher類即是Employee類的子類。從運行結果不難看出,子類雖然沒有定義name屬性和work()方法,可是卻能訪問這兩個成員。這就說明,子類在繼承父類的時候,會自動擁有父類的成員。
小結:
繼承是面向對象的核心特性,是面向對象的學習重點。
繼承是代碼複用的重要方式,是類與類之間的一種關係。
繼承的注意事項:
1.繼承必須合理性:(人是人他媽生的 妖是妖他媽生的)
從類與類之間的設計關係來看,子類必須屬於父類的一種時 is a,纔會繼承。
2.父類中成員是共性的內容
父類抽取出了共性的內容,子類能夠在父類基礎上擴展新的屬性與行爲。
3.子類自動擁有父類的成員而且能夠直接使用非私有的父類成員。
2.2 繼承-子類中訪問父類成員變量特色
瞭解了繼承給咱們帶來的好處,提升了代碼的複用性。繼承讓類與類或者說對象與對象之間產生了關係。那麼,當繼承出現後,類的成員之間產生了那些變化呢?
類的成員重點學習成員變量、成員方法的變化。
成員變量:若是子類父類中出現不一樣名的成員變量,這時的訪問是沒有任何問題。
看以下代碼:
class Fu { //Fu中的成員變量。 int num = 5; } class Zi extends Fu { //Zi中的成員變量 int num2 = 6; //Zi中的成員方法 public void show() { //訪問父類中的num System.out.println("Fu num="+num); //訪問子類中的num2 System.out.println("Zi num2="+num2); } } class Demo { public static void main(String[] args) { Zi z = new Zi(); //建立子類對象 //System.out.println(z.num1); //z.show(); //調用子類中的show方法 } }
代碼說明:Fu類中的成員變量是非私有的,子類中能夠直接訪問,若Fu類中的成員變量私有了,子類是不能直接訪問的。
2.3 繼承-子類中訪問父類成員方法特色
子父類中成員方法的特色
當在程序中經過對象調用方法時,會先在子類中查找有沒有對應的方法,若子類中存在就會執行子類中的方法,若子類中不存在就會執行父類中相應的方法。
看以下代碼:
class Fu{ public void show(){ System.out.println("Fu類中的show方法執行"); } } class Zi extends Fu{ public void show2(){ System.out.println("Zi類中的show2方法執行"); } } public class Test{ public static void main(String[] args) { Zi z = new Zi(); z.show(); //子類中沒有show方法,可是能夠找到父類方法去執行 z.show2(); } }
2.3.1 繼承特色
1.Java只支持單繼承:就一個子類 只能最多直接繼承一個父類
2.Java支持多層繼承:
3.父類定義了繼承樹中共性內容,子類定義了該類個性內容。 說明:在之後的開發過程當中 咱們學習了多態後,要結合多態,能使用父類時儘可能使用父類,提升程序擴展性。