目錄
什麼是類別成員
什麼是實例變數
那麼實例變數和類別變數的差別呢?
那麼類別方法和實例方法的區別?
static關鍵字
static成員方法:
static用途:
方法重写的规则:
super关键字:
首頁 Java java教程 Java類別、封裝、繼承的方法

Java類別、封裝、繼承的方法

Apr 28, 2023 am 11:19 AM
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

熱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 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles