面向對象
概念
本質:以類的方式組織代碼,以對象的形式封裝數(shù)據 抽象
三大特性:封裝、繼承、多態(tài)
一個類里只能有一個 public class,但可以有多個 class
創(chuàng)建與初始化對象
使用 new 關鍵字創(chuàng)建對象,除了分配內存空間,還會給創(chuàng)建好的對象進行默認初始化,以及對類中構造器的調用
構造器
類中的構造器也稱為構造方法,具有兩個特點:
- 必須和類的名字相同
- 必須沒有返回類型,也不能寫 viod
//查看 class 文件,自動生成的
package com.oop.demo02;
public class Person {
public Person() {
}
}
//我們也可以顯式生成
String name;
//無參構造 實例化 初始值
//1.使用 new 關鍵字,必須要有構造器
public Person(){
this.name = "John";
}
//2.有參構造
//一但定義了有參構造,無參構造必須顯式定義!否則會被覆蓋只留下有參構造
//無參構造為空即可
public Person(){
}
public Person(String name){
this.name = name;
}
//new 的時候,如果有參數(shù)就走有參構造;沒有參數(shù)則走無參構造(方法重載)
生成構造器的快捷鍵:alt + insert -- 選擇Constructor
封裝
該露的露,該藏的藏(內部數(shù)據操作細節(jié)自己完成,不允許外部干涉。僅暴露少量的方法給外部使用)
記住這句話:屬性私有,get / set
封裝主要用于屬性,一般不用于方法
package com.oop.demo04;
//類 private:私有
public class Student {
//屬性私有
private String name; //名字
private int id; //學號
private char sex; //性別
//但是可以提供一些可以操作這個屬性的方法
//獲得name屬性的方法
public String getName() {
return name;
}
//設置name屬性的方法
public void setName(String name) {
this.name = name;
}
}
package com.oop.demo04;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
//屬性私有,不可獲取和修改!
//s1.name = "";
//使用 get、set 方法操作私有屬性
s1.setName("joy");
System.out.println(s1.getName());
}
}
生成 get / set 方法的快捷鍵:alt + insert -- 選擇
封裝的作用:
- 校驗用戶輸入的值(限制用戶的操作)
- 提高程序的安全性,保護數(shù)據
- 隱藏代碼的實現(xiàn)細節(jié)
- 統(tǒng)一接口
- 增加系統(tǒng)可維護性
繼承
繼承的本質是一批類的抽象。繼承是類和類之間的一種關系(除繼承外,還有依賴、組合、聚合等)
Java 中類只有單繼承,沒有多繼承
修飾符優(yōu)先級:public > protected > default > private
查看繼承順序快捷鍵:ctrl + h
super
this.屬性/方法
super.屬性/方法 --> 父類的
//私有的 super也繼承不了
//當 new 一個對象時,默認先執(zhí)行要new的類的父類的構造器(隱藏代碼:super()),然后再執(zhí)行該類的構造器
super 注意點:
- 代表父類對象
- super 調用父類的構造方法,必須在構造方法的第一個
- super 必須只能在子類 或 構造方法中
- super 和 this 不能同時調用構造方法!
- 只能在繼承條件下才可以使用
this 注意點:
方法重寫
由此可見 靜態(tài)方法和非靜態(tài)方法區(qū)別很大
靜態(tài)方法:方法的調用只看左邊定義的類型
非靜態(tài)方法:才可以重寫!public!
重寫的方法左邊有個小箭頭!
小結:
重寫的前提:繼承,重寫的是方法而不是屬性
1.方法名必須相同
2.參數(shù)列表必須相同!
3.修飾符:范圍可擴大 (public > protected > default > private)
private 的方法不可重寫!
4.重寫拋出的異常:范圍可以縮小,但不能擴大!
為什么需要重寫?
1.父類的功能,子類不一定需要或者不滿足使用要求。
alt + insert :選擇 override
|