搜尋
首頁Javajava教程Java類別、封裝、繼承的方法

什麼是類別成員

使用static修飾的成員方法和成員變數稱為類別成員

#使用static修飾的成員變數叫做類別變數

使用static修飾的成員方法叫做類別方法

什麼是實例變數

未使用static修飾的成員方法和成員變數稱為實例成員

未使用static修飾的成員變數叫做實例變數

未使用static修飾的成員方法叫做實例方法

例如:

public String name;  //这个就是实例成员(属性) 
public static int age;//这个就是类成员(属性) 

public void a(){
	System.out.println("我叫:"+this.name)
}                                    //这个没有加static的方法就是实例方法

public static void a(){           	//这个加了static的方法就是类方法
	System.out.println("我叫:"+this.name)
}

那麼實例變數和類別變數的差別呢?

  • 所有該類別的物件共享同一個類別變量,但是每個物件都會有自己獨特的實例變數

  • 所有該類別的物件都能改變類別變數的值,但是每個物件只能改變自己的實例變數值

  • 實例變數在使用前必須建立一個對象,根據物件名稱.變數名稱使用,但是類別變數不需要建立物件

//定义一个类
public class stu {
    public String name;  //这个类有一个名字这个属性,属于实例成员,也就是需要实例化对象了才可以使用
    //定义构造方法
    public stu(){}    //不管怎么样,都定义一个无参构造
    public stu(String name){    //定义有参构造,需要传入一个字符串名字
       this.name = name;         //这里若不使用this 关键字,那么是不会与上面的实例属性匹配
    }
    //定义方法
    public void a(){
        System.out.println(this.name);
    }
}

使用該類別:

public class stu_Test {
    public static void main(String[] args) {
        //实例化两个对象,基于stu类
        stu s1 = new stu("小红");   
        stu s2 = new stu("小王");
        //使用stu类里面的方法
        s1.a();
        s2.a();
    }
    
    //stu s1 = new stu("小红");  将会输出小红
    //stu s2 = new stu("小王");  将会输出小王
}
//通过这个就可以明白每个对象都有属于自己的实例变量(属性)

那麼類別方法和實例方法的區別?

  • 所有該類別物件共用類別方法和實例方法

  • #類別方法使用類別名稱.方法名稱([參數])呼叫即可,不需要實例化物件後使用

  • 實例方法使用物件名稱.方法名稱([參數])呼叫

static關鍵字

Java類別提供了兩種類型的變數:用static關鍵字修飾的靜態變數和不用static關鍵字修飾的實例變數。靜態變數屬於類,在記憶體中只有一個複製,只要靜態變數所在的類別被加載,這個靜態變數就會被分配空間,因此就可以被使用了。靜態變數的引用有兩種方式,分別是「類別.靜態變數"和」物件.靜態變數"

static成員方法:

  • static方法是類別的方法,不需要創建物件就可以被調用,而非static方法是物件的方法,只有物件被創建出來後才可以被使用

  • static方法中不能使用this和super關鍵字,不能呼叫非static方法,只能存取所屬類別的靜態成員變數和成員方法,因為當static方法被呼叫時,這個類別的物件可能還沒被創建,即使已經被創建了,也無法確定要呼叫哪個物件的方法。

static用途:

  • 修飾成員變數

  • ##修飾成員方法

  • 靜態程式碼區塊

  • 修飾類別【只能修飾內部類別也就是靜態內部類別】

  • 靜態導套件

static注意事項: 靜態只能存取靜態,非靜態既可以存取非靜態的,也可以存取靜態的。

封裝:

封裝的概念

把客觀事物封裝成抽象的類,並且類別可以把自己的屬性和方法只讓可信的類別或物件進行操作,對不可信的類別或物件隱藏,這樣的過程叫做封裝。簡而言之:把自己的資訊封閉起來,只給自己信任的人看和使用

#封裝的分類

  • 對屬性的封裝:將屬性設定為private(私有),限制其只能在類別的內部使用

  • 對方法的封裝:對於方法的封裝,將外部可以存取方法設為public,將外部不能存取的方法設定為private

封裝的使用

在將封裝之前,我們先學習一個新的修飾符:private private:限制其只能在類的內部使用(也就是說被private修飾的方法和屬性,只能在這個類別內被發現和使用,在這個類別外,是找不到這個屬性的存在,這也達到了封裝的效果)

//给name这个属性进行封装
private Strint name; //即可,这也我们在类外是找不到这个属性的存在的

既然封裝了,肯定也有對這個封裝進行修改和使用的方法,是的,這就是get/set方法

get/set方法

public class stu {
    private String name; 
    public void setName(String name){    //set方法:对象调用这个方法,即可对私有属性进行修改
        this.name = name;   
    }
    public String getName(){         //get方法:对象调用这个方法,就可以使用该方法
        return name;
    }
}

使用:

public class stu_Test {
    public static void main(String[] args) {
    stu s =new stu();
    s.setName("小红");  //给name 这个私有属性修改值为小红
        System.out.println(s.getName());
   
}

//程式執行後,輸出值就是小紅

#繼承:

什麼是繼承

#1:一個新類別可以從現有的​​類別派生,這樣的過程叫做繼承

2:在繼承的過程中,新類別稱為子類,現有的類別稱為父類,子類別將會繼承父類別的屬性和行為。

繼承語法:

public class stu extends Student{   //在类名后加上extends,在写上继承的父类即可
//这里可以写父类没有发属性及方法
	public String ID;  //等等等等

}

注意: 繼承不能繼承父類別的私有屬性和方法! ! !只要被private修飾的,都不被繼承! ! !

關於子類別: 子類別除了可以擁有父類別非私有的屬性和方法外,還可以擴充自己的屬性和方法

繼承的使用:

  • #繼承是單繼承,也就是一個類別只能有一個父類別。

  • 如果一個類別沒有明確的繼承某一個類,那麼它有一個預設的父類是java.lang.Object類別

  • #繼承了父類別非私有的成員變數和成員方法,但是請注意:子類別是無法繼承父類別的建構方法的

簡而言之:一個子類別只能繼承一個父類,如果這個類別沒有繼承別的類,預設繼承Object類別(Java自帶)

#無法繼承父類別的建構方法。

方法的重写:

@overriding

什么是方法重写?:

  • 子类根据需求从父类继承的方法进行重新编写(方法名一样)

  • 重写是可以使用super方法的方式来保留父亲的方法(super在后面讲到)

注意:构造方法不能被重写

方法重写的规则:

  • 方法名相同,参数列表相同(数量,顺序,数据类型)

  • 如果有返回值,返回值相同或者是其子类,访问权限不能严于父类

  • 父类的静态方法不能被重写为非静态方法,反之父类的非静态方法不能被重写为静态方法

  • 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法**(静态方法中无法使用super、this)**

  • 父类的私有方法不能被子类重写(private修饰的)

上代码:

1:定义一个类,有名字和年龄的属性,分别有get/set方法,成员方法是输出名字和年龄:

public class Person {
    private String name;
    private int age;

    //get/ste方法
    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 print(){
        System.out.println("我叫:"+this.name+","+"我今年:"+this.age+"岁");
    }
}

2:写一个类,继承Person类,并且这个类拥有自己的一个sex属性,提供get/set方法 并且重写父类的print方法,输出名字+年龄+性别

public class child extends Person{
    private String sex;      //这个child类继承了Person类,但也拥有自己的属性 sex性别
    public void setSex(String sex){
        this.sex = sex;
    }
    public String getSex(){
        return sex;
    }
    @Override
    //重写父类方法: 因为父类是输出名字和年龄,这里要输出名字,年龄和性别
    public void print(){
        System.out.println("我叫:"+getName()+","+"我今年:"+getAge()+"岁"+","+"我是"+sex+"孩子");
    }
}

3:新建测试类,测试两个类的继承、重写

//测试类,
public class Test {
    public static void main(String[] args) {
        child c = new child();
        c.setName("小红");
        c.setAge(20);
        c.setSex("男");
        c.print();
    }
}
//分别执行child继承person的set方法,使用重写后的方法,

//输出结果为: 我叫:小红,我今年:20岁我是男孩子

super关键字:

super代表的是父类对象

super的使用方式:

1:super.属性名 用于在子类中调用父类被隐藏的同名实例变量

2:super([参数列表]) 用于在子类的构造方法中调用父类的构造方法

注意事项:

  • 每一个子类的构造方法在没有显示调用super(),系统都会提供一个默认的super()

  • super() 书写在第一行

  • 可以在子类构造方法中显示调用super(),完成对特定父类构造方法的调用

简而言之:super就是调用父亲的属性和方法来使用

上代码:

1:新建一个类:定义age为20

public class super_test {
    public int age=20;
    public void print(){
        System.out.println(this.age);
    }
}

2:建第二个类,继承第一个类;

public class su2 extends super_test{
    public int age = 10;
    @Override
    public void print(){
        System.out.println(super.age);  //这里使用super,意思是使用父类的age
    }
}

3:建立测试类:

public class test {
    public static void main(String[] args) {
    su2 s = new su2();
    s.print();
	}
}

这样输出的就是20,是父类的age Java類別、封裝、繼承的方法

this与super的区别:

  • super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函 数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)

  • this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的 形参与类中的成员数据同名,这时需用this来指明成员变量名

  • super()和this()类似,区别是,super()在子类中调用父类的构造方法,this()在本类内调用本类的其 它构造方法。

  • super()和this()均需放在构造方法内第一行,尽管可以用this调用一个构造器,但却不能调用两个

  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造 函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意 义,编译器也不会通过。

  • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括: static变量,static方法,static语句块。

  • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

以上是Java類別、封裝、繼承的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。