【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