【Java基础】Class是什么

首先

我写这篇文章是为了整理我在《简易Java》这本参考书中自学所掌握的知识。

班级的意思是

汇总了物体的状态、特性和功能的内容

    • field:クラスの「状態・性質」を表す仕組み

 

    • method:クラスの「機能」を表す仕組み

 

    member: field、method…etcのこと

宣言课的声明

以下是如何声明一个类。

class クラス名
{
    型名 フィールド名;
    ・・・
    戻り値の型 メソッド名(引数リスト)
    {
    文;
    ・・・
    return 式;
    }
    ・・・
}

使用课程

只声明一个类并不能详细了解它是什么样的东西。
所以需要的是创建对象。

举个例子,我们可以用“车”来替代并思考。

// 車クラス
class Car
{
    // フィールド
    int num; // 車のナンバー
    double gas; // ガソリンの量
}

在上述阶段,我们可以知道“车”这个事物具有“车牌号码”和“汽油量”。
然后,只需根据声明的类,编写代码来创建一辆车。

    このように、コード上で作成される車1台1台のことを、object/instanceといいます。
// 車クラスのオブジェクトを作成
class Sample1
{
    public static void main(String[] args)
    {
        Car car1 = new Car();

        car1.num = 1234;
        car1.gas = 20.5;

        System.out.println("車のナンバーは" + car1.num + "です。");
        System.out.println("ガソリン量は" + car1.gas + "です。");
    }
}
    オブジェクトを作成すると、メンバにアクセスすることができる

要使用类,需要先声明类并创建对象。

构造函数

在一个类中,除了字段和方法之外,还可以编写构造函数。

构造函数和方法非常相似,

    • コンストラクタの名前は、必ずクラス名と同じ

 

    • 戻り値を指定できない

 

    そのクラスのオブジェクトが作成されたときに、定義しておいたコンストラクタ内の処理が自動的に行われる

有各种不同之处。

class Car
{
    private int num;
    private double gas;

    // constructor
    public Car()
    {
        num = 0;
        gas = 0.0;
        System.out.println("車を作成しました。");
    }

    public void show()
    {
        System.out.println("車のナンバーは" + num + "です。");
        System.out.println("ガソリン量は" + gas + "です。");
    }
}

class Sample
{
    public static void main(String[] args)
    {
        Car car1 = new Car();
        car1.show();
    }
}

以下是执行结果。

車を作成しました。
車のナンバーは0です。
ガソリン量は0.0です。

班级的功能

封装

将数据(字段)和功能(方法)作为一个整体封装在类中,并通过在想保护的成员上添加private关键字,阻止其被随意访问的功能。

例)Field(フィールド)→Private member(プライベートメンバー)、Method(メソッド)→Public member(パブリックメンバー)

通过这样做,可以创建出不易出错的程序。

    • public:クラスの外からでもアクセスできる

 

    • private:クラスの外から勝手にアクセスできない

 

    どちらもかかない(省略):「同じパッケージ」に含まれるクラス内からアクセスできる

超载

在同一个类中,可以定义具有相同方法名称但具有不同参数类型和数量的方法。
※构造函数也可以进行重载。

class Car
{
    private int num;
    private double gas;

    public void setCar(int n)
    {
        num = n;
        System.out.println("ナンバーを" + num + "にしました。");
    }

    public void setCar(double g)
    {
        gas = g;
        System.out.println("ガソリン量を" + gas + "にしました。");
    }

    public void setCar(int n, double g)
    {
        num = n;
        gas = g;
        System.out.println("ナンバーを" + num + "にガソリン量を" + gas + "にしました。");
    }

    public void show()
    {
        System.out.println("車のナンバーは" + num + "です。");
        System.out.println("ガソリン量は" + gas + "です。");
    }
}

class Sample
{
    public static void main(String[] args)
    {
        Car car1 = new Car();
        car1.setCar(1234, 20.5);
        car1.show();

        System.out.println("車のナンバーだけ変更します。");
        car1.setCar(2345);
        car1.show();

        System.out.println("ガソリン量だけ変更します。");
        car1.setCar(30.5);
        car1.show();
    }
}

输出结果如下所示。

ナンバーを1234にガソリン量を20.5にしました。
車のナンバーは1234です。
ガソリン量は20.5です。
車のナンバーだけ変更します。
ナンバーを2345にしました。
車のナンバーは2345です。
ガソリン量は20.5です。
ガソリン量だけ変更します。
ガソリン量を30.5にしました。
車のナンバーは2345です。
ガソリン量は30.5です。

在上述代码中,调用了3种类型的setCar()方法。

    • 1番目に、引数が2個のもの

 

    • 2番目に、引数がint型のもの

 

    3番目に、引数がdouble型のもの

可以使用相同的方法名称来处理类似的操作,非常方便。
但需要注意的是,如果参数的类型或数量不同,则无法进行重载!

继承

在Java中,可以基于已经创建的类来创建新的类。

    新しいクラスを作成することを、extends(クラスを拡張する)という。

以汽车为例,如下所示,

class 車
{
    ナンバー;
    ガソリン量;
    ナンバーとガソリン量を表示する機能
}

class レーシングカー extends 車
{
    競技用コース;
    競技用コースを表示する機能;
}
    • 親元のクラス「車」をスーパークラス

 

    追加したクラス「レーシングカー」をサブクラス

希望如此,子类继承超类的成员。

注意:在一个子类中不可以继承多个超类的成员函数。

对成员的访问

在超类的私有成员中,子类也无法访问。

因此,在超类中可以使用protected进行指定。

    protected:サブクラスのほか、同じパッケージに属するクラスからもアクセスできる。

覆写

可以定义一个与超类完全相同的方法名、参数数量和类型的方法。

class Car
{
    protected int num;
    protected double gas;

    public Car()
    {
        num = 0;
        gas = 0.0;
        System.out.println("車を作成しました。");
    }

    public Car(int n, double g)
    {
        num = n;
        gas = g;
        System.out.println("ナンバー" + num + "ガソリン量" + gas + "の車を作成しました。");
    }

    public void setCar(int n, double g)
    {
        num = n;
        gas = g;
        System.out.println("ナンバーを" + num + "にガソリン量を" + gas + "にしました。");
    }

    public void show()
    {
        System.out.println("車のナンバーは" + num + "です。");
        System.out.println("ガソリン量は" + gas + "です。");
    }
}

class RacingCar extends Car
{
    private int course;

    public RacingCar_11()
    {
        course = 0;
        System.out.println("レーシングカーを作成しました。");
    }

    public void setCourse(int c)
    {
        course = c;
        System.out.println("コース番号を" + course + "にしました。");
    }

    public void show()
    {
        System.out.println("レーシングカーのナンバーは" + num + "です。");
        System.out.println("ガソリン量は" + gas + "です。");
        System.out.println("コース番号は" + course + "です。");
    }
}

class Sample
{
    public static void main(String[] args)
    {
        RacingCar rccar1 = new RacingCar();
        rccar1.setCar(1234, 20.5);
        rccar1.setCourse(5);
        rccar1.newShow();
    }
}

以下是执行结果

車を作成しました。
レーシングカーを作成しました。
ナンバーを1234にガソリン量を20.5にしました。
コース番号を5にしました。
レーシングカーのナンバーは1234です。
ガソリン量は20.5です。
コース番号は5です。

创建子类对象并调用show()方法时,子类的show()方法被调用。

如果子类中有一个全名、参数数量和类型都完全相同的方法,那么似乎会调用子类中新定义的方法。

最终

在超类方法的开头加上final关键字,可以避免进行覆写。

请参阅

    やさしいJava
广告
将在 10 秒后关闭
bannerAds