1. 程式人生 > >類和物件、封裝和繼承

類和物件、封裝和繼承

類和物件

類和物件的關係

類是具有相同屬性和方法的一組物件的集合。
1. 從語義上理解:類是用於建立物件的模板,是一個抽象的概念,而物件是類的一個例項。
2. 從語法上理解:類是我們自定義的一種資料型別,而物件則是這種資料型別的變數。

類的定義

public class 類名{
     訪問修飾符 型別 屬性名      //成員變數,也叫全域性變數
     訪問修飾符 返回值型別 方法名(引數型別 引數){
         訪問修飾符 型別 屬性名  //區域性變數
         *方法體*
         }

類的方法

  1. 多個方法不能相互巢狀定義;
  2. Return只能返回一個值,且表示方法結束;
  3. 對於引用資料型別,方法傳遞的是複製的地址;而對於簡單資料型別,方法傳遞的是複製的資料。
    例子:
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); } }
  1. 方法可變引數,只允許傳入的最後一個引數為可變引數
public void function(int... is) { //要把is理解為一個int陣列
  for (int i = 0; i < is.length; i++) {
    System.out.print(is[i]+"  ");
  }
}

對於可變引數,適用於引數個數不確定,型別確定的情況,java把可變引數當做陣列處理,且可變引數必須放在方法引數的最後。
可變引數的特點:
①只能出現在引數列表的最後;
②…位於變數型別和變數名之間,前後有無空格都可以;
③呼叫可變引數的方法時,編譯器為該可變引數隱含建立一個數組,在方法體中一陣列的形式訪問可變引數。

物件的建立和使用

  1. 建立物件:類名 物件名=new 類名();
  2. 使用物件:
    物件名.屬性;
    物件名.方法();

舉例

寫一個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)

條件:①在同一個類中存在兩個以上的同名方法②方法引數不同(引數的數目不同或引數型別的組合不同)③與訪問修飾符和返回值的型別無關

繼承

  1. 繼承需符合的關係:”is-a“,父類更通用,子類更具體
    子類具有父類的一般特性(包括屬性和方法),以及自身特殊的特性。
  2. 繼承使用extends關鍵字,子類只能繼承父類的屬性和方法,不能繼承父類的構造方法
  3. 繼承的初始化順序:先父類的屬性,後父類的構造方法,然後先子類的屬性,後子類的構造方法。

super關鍵字

  1. 呼叫父類的屬性:super.屬性;
  2. 呼叫父類的方法:super.方法();
  3. 子類會預設呼叫父類的無參構造方法(super(),可以省略不寫),若父類有有參構造方法(super(引數),不能省略,且必須放在子類構造方法的第一行)。

this關鍵字

this關鍵字表示呼叫該類例項化的物件

  1. this.屬性名:呼叫該物件的屬性
  2. this.方法名:呼叫該物件的方法
  3. this():呼叫本類中的另一個構造方法,且必須寫在第一行

方法的重寫(override)

  1. 在繼承關係的子類中
  2. 重寫的方法名,引數,返回值型別必須與父類相同
  3. 私有方法不能被繼承,因而也無法重寫
  4. 重寫方法的訪問修飾符的許可權要比父類的許可權大或者相同

訪問修飾符的許可權

這裡寫圖片描述

封裝類

把簡單資料型別封裝為引用資料型別
這裡寫圖片描述
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. 從語法上理解:類是我們自定義的一種資料型別,而物件則是這種資料型別的變數。 類的定義

面向物件物件封裝---------私有privatethis關鍵字

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__訪問限制setget

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