類和物件、封裝和繼承
類和物件
類和物件的關係
類是具有相同屬性和方法的一組物件的集合。
1. 從語義上理解:類是用於建立物件的模板,是一個抽象的概念,而物件是類的一個例項。
2. 從語法上理解:類是我們自定義的一種資料型別,而物件則是這種資料型別的變數。
類的定義
public class 類名{
訪問修飾符 型別 屬性名 //成員變數,也叫全域性變數
訪問修飾符 返回值型別 方法名(引數型別 引數){
訪問修飾符 型別 屬性名 //區域性變數
*方法體*
}
類的方法
- 多個方法不能相互巢狀定義;
- Return只能返回一個值,且表示方法結束;
- 對於引用資料型別,方法傳遞的是複製的地址;而對於簡單資料型別,方法傳遞的是複製的資料。
例子:
public class StudentTest {
public static void main(String[] args) {
Student zhangsan=new Student();
zhangsan.student(18,"zhangsan","Mr.Li");
System.out.println(zhangsan.name);
Student lisi=new Student();
lisi=zhangsan;//將存放zhangsan.name的地址複製一份給lisi
if(lisi.name==zhangsan.name){//lisi.name的地址就和zhangsan.name的地址指向同一個堆記憶體
System.out.println("1");
}
lisi.name="lisi";
System.out.println(zhangsan.name);
int j=0;
int i=j;//將j中的資料複製一份給i,當中的資料改變時,j中資料不受影響
i++;
System.out.println("j=" +j);
System.out.println("i="+i);
}
}
- 方法可變引數,只允許傳入的最後一個引數為可變引數
public void function(int... is) { //要把is理解為一個int陣列
for (int i = 0; i < is.length; i++) {
System.out.print(is[i]+" ");
}
}
對於可變引數,適用於引數個數不確定,型別確定的情況,java把可變引數當做陣列處理,且可變引數必須放在方法引數的最後。
可變引數的特點:
①只能出現在引數列表的最後;
②…位於變數型別和變數名之間,前後有無空格都可以;
③呼叫可變引數的方法時,編譯器為該可變引數隱含建立一個數組,在方法體中一陣列的形式訪問可變引數。
物件的建立和使用
- 建立物件:類名 物件名=new 類名();
- 使用物件:
物件名.屬性;
物件名.方法();
舉例
寫一個Person類
public class Person {
int age;
String name;
String sex;
public Person(int age1,String name1,String sex1){
age=age1;
name=name1;
sex=sex1;
}
public String eat(String food){
System.out.print("你只會吃"+food);
return food;
}
public void sleep(){
System.out.println(",還有睡覺覺!");
}
}
寫一個測試類
public class Test {
public static void main(String[] args) {
Person zhangsan = new Person(18, "張三", "男");
System.out.println("你叫" + zhangsan.name + " 性別" + zhangsan.sex + " 今年" + zhangsan.age + "歲");
zhangsan.eat("飯");
zhangsan.sleep();
}
}
輸出結果為:
變數的初始化
成員變數可以只宣告,不初始化;但區域性變數必須要初始化。
不同資料型別的預設值:
1. 基本資料型別:
byte(0),short(0),int(0),long(0L),float(0.0F),double(0.0),boolean(false),char(’ ‘)
2. 引用資料型別的預設值都為:null
類的封裝
目的為保護私有屬性,新增get()和set()方法來對屬性進行封裝,提高了程式的可複用性和可維護性,降低了程式設計師保持資料與操作內容的負擔。
①修改訪問修飾符—>private
②建立get()和set()方法—>用於屬性的讀寫
③在方法內加入控制語句—>對屬性值得合法性進行判斷
public class Student{
private int stuNo;
public int getStuNo(){
return stuNo;
}
public void setStuNo(int stuNo){
this.stuNo=stuNo;
}
}
構造方法
構造方法:負責物件成員的初始化工作,為例項變數賦予合適的初始值。
語法:①方法名和類名相同;②沒有返回型別
【注意】
1. 使用new關鍵字呼叫構造方法,在我們建立類的例項時會自動呼叫。
2. 一個類可以沒有構造方法(系統有隱藏的無參構造方法),也可以有多個構造方法,它們構造過載關係。
3. 如果我們定義了有參構造方法,就會自動覆蓋掉系統無參的構造方法。
4. 構造方法不能被繼承。
方法的過載(overload)
條件:①在同一個類中存在兩個以上的同名方法②方法引數不同(引數的數目不同或引數型別的組合不同)③與訪問修飾符和返回值的型別無關
繼承
- 繼承需符合的關係:”is-a“,父類更通用,子類更具體
子類具有父類的一般特性(包括屬性和方法),以及自身特殊的特性。 - 繼承使用extends關鍵字,子類只能繼承父類的屬性和方法,不能繼承父類的構造方法
- 繼承的初始化順序:先父類的屬性,後父類的構造方法,然後先子類的屬性,後子類的構造方法。
super關鍵字
- 呼叫父類的屬性:super.屬性;
- 呼叫父類的方法:super.方法();
- 子類會預設呼叫父類的無參構造方法(super(),可以省略不寫),若父類有有參構造方法(super(引數),不能省略,且必須放在子類構造方法的第一行)。
this關鍵字
this關鍵字表示呼叫該類例項化的物件
- this.屬性名:呼叫該物件的屬性
- this.方法名:呼叫該物件的方法
- this():呼叫本類中的另一個構造方法,且必須寫在第一行
方法的重寫(override)
- 在繼承關係的子類中
- 重寫的方法名,引數,返回值型別必須與父類相同
- 私有方法不能被繼承,因而也無法重寫
- 重寫方法的訪問修飾符的許可權要比父類的許可權大或者相同
訪問修飾符的許可權
封裝類
把簡單資料型別封裝為引用資料型別
1. 自動裝箱
Integer i =10;
相當於:Inerger i = new Inerger(10);
2. 自動拆箱
int i = new Inerger(10);
相當於:int i =10
綜合的例子
建立一個Dog類
public class Dog {
String color="紅色";//可以被子類呼叫
public Dog(String s){
System.out.println("呼叫了父類的構造方法");
}
public void run(){
System.out.println("它們都會跑");
}
}
建立一個Jinmao子類
public class Jinmao extends Dog{
public String weiba;
String myColor=super.color;
public Jinmao(){
super("");//呼叫父類的有參構造方法,且必須放在第一句
System.out.println("子類自己的構造方法"+" 子類呼叫父類的屬性"+myColor);
}
public Jinmao(int a){
this();//呼叫子類的另一個構造方法
}
public void run(){ //重寫了父類的run方法
this.weiba="長";
System.out.println("父類方法的重寫:我還會賣萌的跑!");
super.run(); //呼叫父類的方法
}
public void run(int a){ //方法的過載
System.out.println("方法的過載"+a);
}
}
建立一個測試類
public class test {
public static void main(String[] args){
Jinmao jm = new Jinmao();//執行子類無參的構造方法
jm.run(); //呼叫子類的run方法
jm.run(1); //呼叫了子類的過載的run方法
Jinmao jm2 =new Jinmao(1);//執行子類有參的構造方法
}
}
輸出結果:
相關推薦
類和物件、封裝和繼承
類和物件 類和物件的關係 類是具有相同屬性和方法的一組物件的集合。 1. 從語義上理解:類是用於建立物件的模板,是一個抽象的概念,而物件是類的一個例項。 2. 從語法上理解:類是我們自定義的一種資料型別,而物件則是這種資料型別的變數。 類的定義
面向物件、類和物件、封裝---------私有private、this關鍵字
1、面向物件和麵向過程 面向物件是讓誰幹什麼 面向過程是按什麼順序來幹(幹活過程都有參與) 所以在工作中,面向物件更好。 例如: 以打掃辦公室為例:面向過程就是將掃地、拖地、擦玻璃、擦門窗這幾件事情排好(做好)順序,先幹啥再幹啥,需要按照順序一件一件的參與幹活‘ 面向物件就是打掃衛生時,小李拖地,小楊擦玻璃,
面向物件思想:類和物件、封裝、建構函式
面向物件的特點: 面向物件是一種更符合我們思考習慣的思想,它可以將複雜的事件簡單化,並將我們從執行者變成指揮者。 面向過程-強調步驟 面向過程-強調物件,這裡的物件就是洗衣機。 面向物件的語
3.Java面向物件程式設計OOA/OOP/OOD/OOAD()/UML類圖、函數語言程式設計Scala(JVM)---類與物件、封裝繼承多型、構造方法、覆寫/重寫/override
一、緒論 1.面向物件程式設計正規化(C++、Java、Go)------能進行現實生活的抽象。 每個物件都是一個類。類中包含屬性與方法。 OOA:面向物件分析 OOP:面向物件程式設計
Java SE面向物件--06.類與物件、封裝、構造方法
學習目標: 面向物件 類與物件 三大特徵——封裝 構造方法 一、面向物件 1.1 引入面向物件(瞭解) 在開發的過程中,我們經常會遇到在多個程式中使用到同一個功能的情況。如下需求: 需求:定義類,在類中有定義功能對陣列求和的需求 clas
如何講清楚 Java 面向物件的問題與知識?(類與物件,封裝,繼承,多型,介面,內部類...)
# 寫在最前面 這個專案是從20年末就立好的 flag,經過幾年的學習,回過頭再去看很多知識點又有新的理解。所以趁著找實習的準備,結合以前的學習儲備,建立一個主要針對應屆生和初學者的 Java 開源知識專案,專注 Java 後端面試題 + 解析 + 重點知識詳解 + 精選文章的開源專案,希望它能伴隨你我一直
快學Scala學習筆記及習題解答(5-8類、物件、包和繼承)
本文scala使用的版本是2.11.7 第五章 類 5.1 基本操作 class Person { // Scala會生成一個私有的final欄位和一個getter方法,但沒有setter val timeStamp = ne
python 物件的魔力--多型、封裝和繼承
簡單介紹下這幾個名詞的意思。 多型(Polymorphism):意味著可以對不同類的物件使用相同的操作。 封裝(Encapsulation): 即對外部世界隱藏物件的工作細節。 繼承(Inheritance): 以通用的類為基礎建立專門的類物件。 一、多型 多型
類和物件;封裝
屬性(特徵)與行為(方法) 類:現實生活中物件的抽象,抽象的資料型別 物件:類的例項化 封裝:將物件的屬性和行為組合成為一個獨立的單位或不見,並儘可能i隱藏物件內部細節,只保留必要的對外介面,使之與外部發生聯絡 軟體包:把多個類收集在一起成為一組 封裝的優點:隱藏隱私、隱藏實現細節、方便加入控制(約
C實現繼承、封裝和多型思路
1、繼承 把父類資料結構放在子資料結構的首位置,方便以後資料訪問和資料的強轉 struct parent{ int info; }; struct child { s
JAVA基礎第三章-類與物件、抽象類、介面 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型
業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。 往期章節: JAVA基礎第一章-初識java JAVA基礎第二章-java三大特
面向物件基礎、類和物件、繫結方法
一、面向物件程式設計 回顧:面向過程程式設計 是一種之前程式設計師們設計出來的比較好的程式設計方法,也是一種程式設計思想。 核心是過程二字,顧名思義,就是先幹什麼,再幹什麼,完成一個事情具有的所有步驟。 優點:複雜的流程簡單化,程式化,一步一步拆分,降低開發難度。 缺點:擴充套件性差, 不容易維護。 主要使用
JAVA基礎第四章-集合框架Collection篇 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型 JAVA基礎第三章-類與物件、抽象類、介面 記一次list迴圈刪除元素的突發事件!
業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。 往期章節: JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性
java的知識點12——==和equals方法、 super關鍵字、 繼承樹追溯、封裝的作用和含義、封裝的實現—使用訪問控制符、封裝的使用細節
==和equals方法 “==”代表比較雙方是否相同。如果是基本型別則表示值相等,如果是引用型別則表示地址相等即是同一個物件。 Object 的 equals 方法預設就是比較兩個物件的hashcode,是同一個物件的引用時返回 true 否則返回 false。但是,我
JAVA基礎第五章-集合框架Map篇 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型 JAVA基礎第三章-類與物件、抽象類、介面 JAVA基礎第四章-集合框架Collection篇
業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。 往期章節: JAVA基礎第一章-初識java
Python基礎筆記_Day10_Python面向物件、類和物件、__init__、__str__、訪問限制、set、get
Day10_Python面向物件、類和物件、init、str、訪問限制、set、get 10.01_Python語言基礎(面向物件思想)(理解) 10.02_Python語言基礎(類和物件)(掌握) 10.03_Python語言基礎(類的構成)(掌握) 10.04_Python語言基礎(
《head first java》類、物件、屬性和方法的關係
類的定義:類是對某一類事物的描述,是抽象的、概念上的意義。 屬性表示類的特性,如 類——冰箱 屬性——價格、耗電量、體積 方法表示類的功能,類能做什麼,如 類——冰箱 方法——儲存、冷凍等 類需要通過class來宣告 class 類名稱{ 屬性 方法 } 函
類和物件、訪問限定符、預設成員函式
1、類的定義,訪問限定符,面向物件封裝性,物件的引用。 (1)每個實體都是物件,物件的型別是類,而物件是類的具體例項。類是抽象的,不佔用記憶體,而物件是具體的,佔用儲存空間。 類是使用者建立的型別,如果程式中要用到類型別,必須根據自己的需要進行宣告,或者使
Java基礎學習 三 (類和物件、類和成員修飾符、this關鍵字、成員的初始化、構造器初始化)
面向物件的基本概念 類和物件 1.類的宣告 [修飾符關鍵字] class 類名 [extends 父類名] [implements 介面1,介面2]{ //類的主體內容 } public class tt extends Test implements Te
flutter--Dart基礎語法(三)類和物件、泛型、庫
一、前言 Flutter 是 Google 開源的 UI 工具包,幫助開發者通過一套程式碼庫高效構建多平臺精美應用,Flutter 開源、免費,擁有寬鬆的開源協議,支援移動、Web、桌面和嵌入式平臺。 Flutter是使用Dart語言開發的跨平臺移動UI框架,通過自建繪製引擎,能高效能、高保真地進行Andro