クラスとオブジェクト

JavaJavaBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、非常に重要なプログラミングパターンであるオブジェクト指向プログラミング(object-oriented-programming)について学びます。クラス(class)とオブジェクト(object)の違いを理解する必要があります。より深く理解するために、多くの練習を行ってください。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 92.21%です。学習者から 100% の好評価を得ています。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") subgraph Lab Skills java/method_overloading -.-> lab-178544{{"クラスとオブジェクト"}} java/classes_objects -.-> lab-178544{{"クラスとオブジェクト"}} java/constructors -.-> lab-178544{{"クラスとオブジェクト"}} end

クラスとオブジェクト

多くのプログラミング言語が存在し、それとほぼ同じ数のプログラミングスタイル(時にはパラダイムと呼ばれます)があります。これまでに書いたプログラムは主に手続き型で、計算手順の指定に重点が置かれていました。ほとんどの Java プログラムはオブジェクト指向で、これはオブジェクトとその相互作用に焦点が当てられていることを意味します。以下はオブジェクト指向プログラミングのいくつかの特徴です。

オブジェクトはしばしば現実世界のエンティティを表します。ほとんどのメソッドはオブジェクトメソッド(String で呼び出すメソッドのようなもの)であり、クラスメソッド(Math のメソッドのようなもの)ではありません。これまでに書いたメソッドはクラスメソッドでした。この章では、いくつかのオブジェクトメソッドを書きます。

オブジェクトは、相互作用の方法を制限することで、特にメソッドを呼び出さずにインスタンス変数にアクセスすることを防ぐことで、互いに分離されています。クラスは、新しいクラスが既存のクラスを拡張し、新しいメソッドを追加したり他のメソッドを置き換えたりする家族の木(クラス階層)で組織されています。

Java では、Object クラスを除くすべてのクラスは、他のクラスを拡張しています。最も基本的なクラスは Object クラスです。このクラスにはインスタンス変数が含まれていませんが、equalstoString などのメソッドを提供しています。

多くのクラスが Object を拡張しており、これにはこれまでに書いたほとんどすべてのクラスや、IntegerDoubleString、配列などの多くの Java の 型(types) が含まれます。明示的に親クラスを指定しないクラスは、デフォルトで Object を拡張します。クラスの「家族の木」は クラス階層(class hierarchy) と呼ばれます。Object は通常最上位に位置し、その下にすべての 子クラス(child classes) があります。

クラスとオブジェクトには通常、それらを説明するために使用されるいくつかの属性があり、メソッドは特定の機能を実行するために使用されます。ここでは、クラスがどのようなものかを示す例を紹介します。コードを objectTest.java に保存し、コマンドラインでコードを実行してください。

例:

以下のコードを /home/labex/project/objectTest.java ファイルに書きます。

// use keyword 'class' to create a new class named Person
class Person
{
    /*
     * there are four properties,
     * name of string type, age of int type
     * gender of string type, weight of float type
    */
    private String name;
    private int age;
    private String gender;
    private float weight;
    // this is a constructor with no return type, the same name as the class, no parameters
    public Person(){

    }
    //this is a constructor with two parameters
    public Person(String name, int age){
        // use parameters to set object's name and age
        this.name = name;
        this.age = age;
    }
    // this is a constructor with four parameters
    public Person(String name, int age, String gender, float weight){
        // use parameters to set object's name, age, gender and weight
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.weight = weight;
    }
       // this is an object method
    public void personInfo(){
        System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
    }
}

public class objectTest{
    public static void main(String[] args){
        // use 'new' to create an instance of class Person
        Person p = new Person("aaa",18,"male",50.5f);  // p refers to  an object
        /* you can try these two different construction methods, and see what the output is.
         * Person p  = new Person();
         * Person p = new Person("aaa",18);
        */
        // use object to invoke method personInfo()
        p.personInfo();
    }
}

出力:

以下のコマンドを使用して objectTest.java ファイルを実行します。

javac /home/labex/project/objectTest.java
java objectTest

出力を確認します。

Name: aaa
Age: 18
Gender: male
Weight: 50.5

Person クラスには 4 つの属性があります。すべての属性は private であるため、外部からアクセスすることはできません(クラス内部でのみ使用できます)。個人情報を印刷するための personInfo という名前のオブジェクトメソッドが 1 つあり、クラス名 Person と同じ名前のコンストラクタが 3 つあります。これらのコンストラクタの唯一の違いはパラメータです。このような動作を オーバーロード(overloading) と呼びます。

まとめ

この部分は非常に重要です。クラス(class)は共通の特徴を持つエンティティの抽象化であり、オブジェクト(object)は特定の特徴を持つエンティティです。上記のプログラミングスタイルを理解するために、もっと時間をかけるべきです。