1650357060
こんにちは、皆さん!今日は、Javaでのオブジェクト指向プログラミングについて説明します。
この記事は、オブジェクト指向プログラミングの基本原則とその概念を完全に理解するのに役立ちます。
これらの概念を理解すると、Javaでオブジェクト指向プログラミングの原則を使用して基本的な問題解決アプリケーションを開発する自信と能力が得られるはずです。
オブジェクト指向プログラミング(OOP)は、 「オブジェクト」の概念に基づく基本的なプログラミングパラダイムです。これらのオブジェクトには、フィールド(属性またはプロパティと呼ばれることが多い)の形式のデータと、プロシージャ(メソッドと呼ばれることが多い)の形式のコードを含めることができます。
オブジェクト指向アプローチのコアコンセプトは、複雑な問題をより小さなオブジェクトに分割することです。
Javaは、Windows、Mac、Linuxなどのさまざまなオペレーティングシステムで動作する、汎用のクラスベースのオブジェクト指向プログラミング言語です。
Javaを使用して以下を開発できます。
そして、はるかに。
Javaでは、すべてのアプリケーションはクラス名で始まり、このクラスはファイル名と一致する必要があります。ファイルを保存するときは、クラス名を使用して保存し、ファイル名の末尾に「 .java 」を追加してください。
「 HellofreeCodeCampcommunity 」というメッセージを出力するJavaプログラムを書いてみましょう。私の名前は... 」です。
まず、Main.javaという最初のJavaファイルを作成します。これは、任意のテキストエディタで実行できます。ファイルを作成して保存した後、以下のコード行を使用して、期待される出力を取得します。
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello freeCodeCamp community. My name is Patrick Cyubahiro.");
}
}
現時点で上記のコードを理解していなくても心配しないでください。以下のコードの各行について、段階的に説明します。
今のところ、Javaで実行されるコードのすべての行がクラスに含まれている必要があることに注意することから始めてください。
Javaでは大文字と小文字が区別されることにも注意してください。これは、Javaが大文字と小文字を区別する機能を備えていることを意味します。たとえば、変数「 myClass 」と変数「 myclass 」はまったく異なるものです。
さて、そのコードが何をしているのか見てみましょう:
main()
まず、メソッドを見てみましょうpublic static void main(String[] args)
。
このメソッドはすべてのJavaプログラムで必須であり、Javaプログラムのエントリポイントであるため、最も重要なメソッドです。
その構文は常にpublic static void main(String[] args)
です。変更できるのは、文字列配列引数の名前だけです。たとえば、に変更できargs
ますmyStringArgs
。
クラスは、オブジェクトのコレクションとして定義されます。クラスは、個々のオブジェクトを作成するための青写真と考えることもできます。
クラスを作成するには、キーワードを使用し class
ます。
class ClassName {
// fields
// methods
}
上記の構文では、フィールド(変数とも呼ばれます)とメソッドがあり、それぞれオブジェクトの状態と動作を表します。
Javaでは、フィールドを使用してデータを格納し、メソッドを使用して操作を実行することに注意してください。
変数「 y 」を使用して「 Main 」という名前のクラスを作成します。変数「 y 」は値2を格納します。
public class Main {
int y = 2;
}
クラスは常に大文字の最初の文字で始まる必要があり、Javaファイルはクラス名と一致する必要があることに注意してください。
オブジェクトは、明確に識別できる実世界のエンティティです。オブジェクトには状態と動作があります。つまり、特定のタイプのデータを有用にするためのメソッドとプロパティで構成されています。
オブジェクトは次のもので構成されます。
オブジェクトが持つことができる状態と動作の実際の例をいくつか見てみましょう。
public class Number {
int y = 10;
public static void main(String[] args) {
Number myObj = new Number();
System.out.println(myObj.y);
}
}
Java仮想マシン(JVM)は、コンピューターがJavaプログラムを実行できるようにする仮想マシンです。
JVMには、次の2つの主要な機能があります。
Javaでは、アクセス修飾子は、クラス、メソッド、およびその他のメンバーのアクセシビリティを設定するキーワードです。
これらのキーワードは、クラス内のフィールドまたはメソッドを、別のクラスまたはサブクラス内の別のメソッドで使用または呼び出すことができるかどうかを決定します。
アクセス修飾子を使用して、アクセスを制限することもできます。
Javaには、次の4種類のアクセス修飾子があります。
ここで、それぞれについて詳しく見ていきましょう。
デフォルトのアクセス修飾子は、package-privateとも呼ばれます。 これを使用して、同じパッケージ内のすべてのメンバーを表示しますが、それらには同じパッケージ内でのみアクセスできます。
クラス、メソッド、またはデータメンバーに対してアクセス修飾子が指定または宣言されていない場合、デフォルトのアクセス修飾子が自動的に使用されることに注意してください。
デフォルトのアクセス修飾子を使用する方法の例を次に示します。
class SampleClass
{
void output()
{
System.out.println("Hello World! This is an Introduction to OOP - Beginner's guide.");
}
}
class Main
{
public static void main(String args[])
{
SampleClass obj = new SampleClass();
obj.output();
}
}
次に、このコードが何をしているのか見てみましょう。
void output()
:アクセス修飾子がない場合、プログラムは自動的にデフォルトの修飾子を使用します。
SampleClass obj = new SampleClass();
:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスにアクセスできます。
obj.output();
:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスメソッドにアクセスできます。
出力は次のとおりHello World! This is an Introduction to OOP - Beginner's guide.
です。
パブリックアクセス修飾子を使用すると、クラス、メソッド、またはデータフィールドにJavaプログラムの任意のクラスまたはパッケージからアクセスできます。パブリックアクセス修飾子は、パッケージ内およびパッケージ外からアクセスできます。
一般に、パブリックアクセス修飾子はエンティティをまったく制限しません。
パブリックアクセス修飾子の使用方法の例を次に示します。
// Car.java file
// public class
public class Car {
// public variable
public int tireCount;
// public method
public void display() {
System.out.println("I am a Car.");
System.out.println("I have " + tireCount + " tires.");
}
}
// Main.java
public class Main {
public static void main( String[] args ) {
// accessing the public class
Car car = new Car();
// accessing the public variable
car.tireCount = 4;
// accessing the public method
car.display();
}
}
出力:
I am a Car.
I have 4 tires.
次に、そのコードで何が起こっているかを見てみましょう。
上記の例では、
Car
には、メインクラスからアクセスします。tireCount
は、Mainクラスからアクセスされます。display()
は、Mainクラスからアクセスされます。プライベートアクセス修飾子は、アクセシビリティレベルが最も低いアクセス修飾子です。これは、privateとして宣言されたメソッドとフィールドがクラスの外部からアクセスできないことを意味します。これらは、これらのプライベートエンティティをメンバーとして持つクラス内でのみアクセスできます。
また、クラスのサブクラスにもプライベートエンティティが表示されないことに注意してください。
クラスの外部でprivateと宣言された変数とメソッドにアクセスしようとするとどうなるかの例を次に示します。
class SampleClass
{
private String activity;
}
public class Main
{
public static void main(String[] main)
{
SampleClass task = new SampleClass();
task.activity = "We are learning the core concepts of OOP.";
}
}
さて、ここで何が起こっているのですか?
private String activity
:プライベートアクセス修飾子は、変数「アクティビティ」をプライベートにします。SampleClass task = new SampleClass();
:SampleClassのオブジェクトを作成しました。task.activity = "We are learning the core concepts of OOP.";
:このコード行では、別のクラスからプライベート変数とフィールドにアクセスしようとしています(プライベートアクセス修飾子のためにアクセスできません)。上記のプログラムを実行すると、次のエラーが発生します。
Main.java:49: error: activity has private access in SampleClass
task.activity = "We are learning the core concepts of OOP.";
^
1 error
これは、別のクラスからプライベート変数とフィールドにアクセスしようとしているためです。
したがって、これらのプライベート変数にアクセスする最良の方法は、getterメソッドとsetterメソッドを使用することです。
ゲッターとセッターは、特にクラスを作成するときにデータを保護するために使用されます。インスタンス変数ごとにgetterメソッドを作成すると、setterメソッドがその値を設定している間、メソッドはその値を返します。
gettersメソッドとsettersメソッドを使用してプライベート変数にアクセスする方法を見てみましょう。
class SampleClass
{
private String task;
// This is the getter method.
public String getTask()
{
return this.task;
}
// This is the setter method.
public void setTask(String task)
{
this.task= task;
}
}
public class Main
{
public static void main(String[] main)
{
SampleClass task = new SampleClass();
// We want to access the private variable using the getter and setter.
task.setTask("We are learning the core concepts of OOP.");
System.out.println(task.getTask());
}
}
上記のプログラムを実行すると、次のようになります。
We are learning the core concepts of OOP.
上記の例で名前が付けられたプライベート変数があるため、外部クラスから変数にアクセスするためにtask
メソッドを使用しgetTask()
ました。setTask()
これらのメソッドは、Javaではgetterおよびsetterと呼ばれます。
セッターメソッド(setTask()
)を使用して変数に値を割り当て、ゲッターメソッド(getTask()
)を使用して変数にアクセスしました。
キーワードの詳細については、this
こちらの記事をご覧ください。
メソッドとデータメンバーが宣言さprotected
れると、同じパッケージ内およびサブクラスからそれらにアクセスできます。
protected
アクセス修飾子は、デフォルトのアクセス修飾子となんらかの形で似ているとも言え ます。サブクラスでの可視性という1つの例外があるだけです。
クラスは保護されていると宣言できないことに注意してください。このアクセス修飾子は通常、親子関係で使用されます。
保護されたアクセス修飾子を使用する方法を見てみましょう。
// Multiplication.java
package learners;
public class Multiplication
{
protected int multiplyTwoNumbers(int a, int b)
{
return a*b;
}
}
// Test.java
package javalearners;
import learners.*;
class Test extends Multiplication
{
public static void main(String args[])
{
Test obj = new Test();
System.out.println(obj.multiplyTwoNumbers(2, 4));
}
} //output: 8
このコードは何をしているのですか?
この例で Test
は、別のパッケージに存在するクラスは multiplyTwoNumbers()
、保護されていると宣言されているメソッドを呼び出すことができます。
このメソッドは、Test
クラスがクラスAdditionを拡張し、修飾子がサブクラス(任意のパッケージ)のメンバーprotected
へのアクセスを許可するため、これを行うことができます。protected
Javaのコンストラクターは、新しく作成されたオブジェクトを初期化するために使用するメソッドです。
public class Main {
int a;
public Main() {
a = 3 * 3;
}
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.a);
}
}
では、このコードで何が起こっているのでしょうか?
Main
クラスを作成することから始めました。a
。a
宣言した変数の初期値を設定しました。変数a
の値は9になります。プログラムは3x3を取ります。これは9に相当します。変数には、任意の値を自由に割り当てることができますa
。(プログラミングでは、記号「*」は乗算を意味します)。すべてのJavaプログラムは、main()
メソッドで実行を開始します。したがって、を使用しましたpublic static void main(String[] args)
。これは、プログラムが実行を開始するポイントです。つまり、このmain()
メソッドはすべてのJavaプログラムのエントリポイントです。
main()
次に、メソッド内のすべてのキーワードが何をするかを説明します。
publicキーワードはアクセス修飾子です。その役割は、メソッドにアクセスできる場所と、メソッドにアクセスできるユーザーを指定することです。したがって、main()
メソッドを公開すると、グローバルに利用できるようになります。つまり、プログラムのすべての部分にアクセスできるようになります。
メソッドがstaticキーワードで宣言されている場合、それは静的メソッドと呼ばれます。したがって、Javamain()
メソッドは常に静的であるため、コンパイラは、クラスのオブジェクトの作成なしまたは作成前にJavaメソッドを呼び出すことができます。
main()
メソッドが非静的であることが許可されている場合、Java仮想マシンはmain()
メソッドの呼び出し中にそのクラスをインスタンス化する必要があります。
main()
staticキーワードは、Java仮想マシンによってメソッドを呼び出すためだけに宣言されたオブジェクトによって使用されたはずの不要なメモリの浪費を節約するためにも重要です。
voidキーワードは、メソッドが何も返さないことを指定するために使用されるキーワードです。メソッドが何も返すことが期待されていない場合は常に、main()
その戻り型は無効です。つまり、これは、main()
メソッドが終了するとすぐに、Javaプログラムも終了することを意味します。
Mainは、Javaのmainメソッドの名前です。これは、Java仮想マシンがJavaプログラムの開始点として探す識別子です。
String[] args
これは、Javaコマンドライン引数を格納する文字列の配列です。
次のステップは、クラスMainのオブジェクトを作成することです。クラスコンストラクターを呼び出す関数呼び出しを作成しました。
最後のステップは、の値a
9を出力することです。
メソッドは、特定のタスクを実行するコードのブロックです。Javaではメソッドという用語を使用しますが、C ++などの他のプログラミング言語では、同じメソッドが一般に関数として知られています。
Javaには、次の2種類のメソッドがあります。
Javaでメソッドを使用する方法の例を示します。
class Main {
// create a method
public int divideNumbers(int x, int y) {
int division = x / y;
// return value
return division;
}
public static void main(String[] args) {
int firstNumber = 4;
int secondNumber = 2;
// create an object of Main
Main obj = new Main();
// calling method
int result = obj.divideNumbers(firstNumber, secondNumber);
System.out.println("Dividing " + firstNumber + " by " + secondNumber + " is: " + result);
}
}
出力:
Dividing 4 by 2 is: 2
上記の例では、という名前のメソッドを作成しましたdivideNumbers()
。このメソッドは2つのパラメーターxとyを取り、2つの引数firstNumber
とを渡してメソッドを呼び出しましたsecondNumber
。
Javaの基本をいくつか理解したところで、オブジェクト指向プログラミングの原則をもう少し詳しく見ていきましょう。
オブジェクト指向プログラミングパラダイムには、4つの主要な原則があります。これらの原則は、オブジェクト指向プログラミングの柱としても知られています。
オブジェクト指向プログラミングの4つの主要な原則は次のとおりです。
カプセル化とは、データを1つのユニットにまとめることです。簡単に言えば、これは多かれ少なかれ、このシールドの外側のコードがデータにアクセスするのを防ぐ保護シールドのようなものです。
カプセル化の簡単な例はランドセルです。ランドセルは、本、ペン、鉛筆、定規など、すべてのアイテムを1か所に安全に保管できます。
プログラミングにおける情報隠蔽またはデータ隠蔽とは、プログラム全体の不注意による変更からデータまたは情報を保護することです。これは強力なオブジェクト指向プログラミング機能であり、カプセル化と密接に関連しています。
カプセル化の背後にある考え方は、「機密」データをユーザーから確実に隠すことです。これを実現するには、次のことを行う必要があります。
private
。get
とメソッドを提供します。setprivate
覚えているように、private
変数は同じクラス内でのみアクセスでき、外部クラスはそれらにアクセスできません。get
ただし、パブリックメソッドとメソッドを提供すればアクセスできますset
。
get
およびset
メソッドがどのように機能するかを示す追加の例を示します。
public class Student {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
継承により、クラスは他のクラスの属性とメソッドを継承できます。これは、親クラスが属性と動作を子クラスに拡張することを意味します。継承は再利用性をサポートします。
継承という用語を説明する簡単な例は、人間は(一般に)話す、呼吸する、食べる、飲むなどの能力など、クラス「人間」から特定のプロパティを継承することです。
「継承の概念」は次の2つのカテゴリに分類されます。
クラスから継承するには、extends
キーワードを使用します。
以下の例では、JerryTheMouse
クラスからメソッドとフィールドを継承してクラスを作成していますAnimal
。
JerryTheMouse
はサブクラスでAnimal
あり、はスーパークラスです。
class Animal {
// field and method of the parent class
String name;
public void eat() {
System.out.println("I can eat");
}
}
// inherit from Animal
class JerryTheMouse extends Animal {
// new method in subclass
public void display() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
JerryTheMouse labrador = new JerryTheMouse();
// access field of superclass
mouse.name = "Jerry, the mouse";
mouse.display();
// call method of superclass
// using object of subclass
mouse.eat();
}
}
出力:
My name is Jerry
I can eat
抽象化は、オブジェクト指向プログラミングの概念であり、重要な属性のみを表示し、コード内の不要な情報を非表示にすることができます。抽象化の主な目的は、ユーザーから不要な詳細を隠すことです。
抽象化を説明する簡単な例は、電子メールを送信するときに関係するプロセスについて考えることです。電子メールを送信すると、送信直後に何が起こるか、サーバーが使用するプロトコルなどの複雑な詳細が隠されます。
電子メールを送信するときは、受信者の電子メールアドレス、電子メールの件名を入力し、内容を入力して、[送信]をクリックするだけです。
抽象クラスまたはインターフェースを使用して、ものを抽象化できます。
キーワードはabstract
非アクセス修飾子であり、クラスとメソッドに使用されます。
abstract
キーワードを使用して抽象メソッドを作成します。抽象メソッドの本体は、サブクラス(から継承)によって提供されます。
例:
// Abstract class
abstract class Animal {
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep() {
System.out.println("Zzzz");
}
}
// Subclass (inherit from Animal)
class Cow extends Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The cow says: Moo");
}
}
class Main {
public static void main(String[] args) {
Cow myCow = new Cow(); // Create a Cow object
myCow.animalSound();
myCow.sleep();
}
}
ポリモーフィズムとは、オブジェクトがさまざまな形をとる能力を指します。ポリモーフィズムは通常、継承によって相互に関連する多くのクラスがある場合に発生します。
ポリモーフィズムは、人が同時に異なる特性を持つことができる方法に似ています。
たとえば、男性は、父親、祖父、夫、従業員など、すべて同時になることができます。したがって、同じ人がさまざまな状況でさまざまな特性や行動を持っています。
例:
オブジェクトCowとCatを作成しanimalSound()
、それぞれでメソッドを呼び出します。
class Animal {
public void animalSound() {
System.out.println("An animal can make a sound.");
}
}
class Cow extends Animal {
public void animalSound() {
System.out.println("A cow says: Moooo");
}
}
class Cat extends Animal {
public void animalSound() {
System.out.println("A cat says: Meeooww");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myCow = new Cow();
Animal myCat = new Cat();
myAnimal.animalSound();
myCow.animalSound();
myCat.animalSound();
}
}
継承とポリモーフィズムは、コードの再利用に非常に役立ちます。新しいクラスを作成するときに、既存のクラスの属性とメソッドを再利用できます。
Aninterface
は抽象的なメソッドのコレクションです。言い換えると、anは、関連するメソッドを空の本体でグループ化するために使用されるinterface
完全に「抽象クラス」です。
インターフェイスは、クラスが実行できることを指定しますが、クラスが実行できる方法は指定しません。
例:
// create an interface
interface Language {
void getName(String name);
}
// class implements interface
class ProgrammingLanguage implements Language {
// implementation of abstract method
public void getName(String name) {
System.out.println("One of my favorite programming languages is: " + name);
}
}
class Main {
public static void main(String[] args) {
ProgrammingLanguage language = new ProgrammingLanguage();
language.getName("Java");
}
}
出力:
One of my favorite programming languages is: Java
この記事では、オブジェクト指向プログラミングの主な概念のいくつかを見てきました。これらの概念を上手に使い、優れたコードを書きたい場合は、これらの概念をよく理解することが不可欠です。
この記事がお役に立てば幸いです。
私の名前はPatrickCyubahiroです。ソフトウェアとウェブの開発者、UI / UXデザイナー、テクニカルライター、コミュニティビルダーです。
Twitterで私と連絡してください:@ Pat_Cyubahiro、または次のアドレスに書いてください:ampatrickcyubahiro [at] gmail.com
読んでくれてありがとう!
ソース:https ://www.freecodecamp.org/news/object-Oriented-programming-concepts-java/
1650357060
こんにちは、皆さん!今日は、Javaでのオブジェクト指向プログラミングについて説明します。
この記事は、オブジェクト指向プログラミングの基本原則とその概念を完全に理解するのに役立ちます。
これらの概念を理解すると、Javaでオブジェクト指向プログラミングの原則を使用して基本的な問題解決アプリケーションを開発する自信と能力が得られるはずです。
オブジェクト指向プログラミング(OOP)は、 「オブジェクト」の概念に基づく基本的なプログラミングパラダイムです。これらのオブジェクトには、フィールド(属性またはプロパティと呼ばれることが多い)の形式のデータと、プロシージャ(メソッドと呼ばれることが多い)の形式のコードを含めることができます。
オブジェクト指向アプローチのコアコンセプトは、複雑な問題をより小さなオブジェクトに分割することです。
Javaは、Windows、Mac、Linuxなどのさまざまなオペレーティングシステムで動作する、汎用のクラスベースのオブジェクト指向プログラミング言語です。
Javaを使用して以下を開発できます。
そして、はるかに。
Javaでは、すべてのアプリケーションはクラス名で始まり、このクラスはファイル名と一致する必要があります。ファイルを保存するときは、クラス名を使用して保存し、ファイル名の末尾に「 .java 」を追加してください。
「 HellofreeCodeCampcommunity 」というメッセージを出力するJavaプログラムを書いてみましょう。私の名前は... 」です。
まず、Main.javaという最初のJavaファイルを作成します。これは、任意のテキストエディタで実行できます。ファイルを作成して保存した後、以下のコード行を使用して、期待される出力を取得します。
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello freeCodeCamp community. My name is Patrick Cyubahiro.");
}
}
現時点で上記のコードを理解していなくても心配しないでください。以下のコードの各行について、段階的に説明します。
今のところ、Javaで実行されるコードのすべての行がクラスに含まれている必要があることに注意することから始めてください。
Javaでは大文字と小文字が区別されることにも注意してください。これは、Javaが大文字と小文字を区別する機能を備えていることを意味します。たとえば、変数「 myClass 」と変数「 myclass 」はまったく異なるものです。
さて、そのコードが何をしているのか見てみましょう:
main()
まず、メソッドを見てみましょうpublic static void main(String[] args)
。
このメソッドはすべてのJavaプログラムで必須であり、Javaプログラムのエントリポイントであるため、最も重要なメソッドです。
その構文は常にpublic static void main(String[] args)
です。変更できるのは、文字列配列引数の名前だけです。たとえば、に変更できargs
ますmyStringArgs
。
クラスは、オブジェクトのコレクションとして定義されます。クラスは、個々のオブジェクトを作成するための青写真と考えることもできます。
クラスを作成するには、キーワードを使用し class
ます。
class ClassName {
// fields
// methods
}
上記の構文では、フィールド(変数とも呼ばれます)とメソッドがあり、それぞれオブジェクトの状態と動作を表します。
Javaでは、フィールドを使用してデータを格納し、メソッドを使用して操作を実行することに注意してください。
変数「 y 」を使用して「 Main 」という名前のクラスを作成します。変数「 y 」は値2を格納します。
public class Main {
int y = 2;
}
クラスは常に大文字の最初の文字で始まる必要があり、Javaファイルはクラス名と一致する必要があることに注意してください。
オブジェクトは、明確に識別できる実世界のエンティティです。オブジェクトには状態と動作があります。つまり、特定のタイプのデータを有用にするためのメソッドとプロパティで構成されています。
オブジェクトは次のもので構成されます。
オブジェクトが持つことができる状態と動作の実際の例をいくつか見てみましょう。
public class Number {
int y = 10;
public static void main(String[] args) {
Number myObj = new Number();
System.out.println(myObj.y);
}
}
Java仮想マシン(JVM)は、コンピューターがJavaプログラムを実行できるようにする仮想マシンです。
JVMには、次の2つの主要な機能があります。
Javaでは、アクセス修飾子は、クラス、メソッド、およびその他のメンバーのアクセシビリティを設定するキーワードです。
これらのキーワードは、クラス内のフィールドまたはメソッドを、別のクラスまたはサブクラス内の別のメソッドで使用または呼び出すことができるかどうかを決定します。
アクセス修飾子を使用して、アクセスを制限することもできます。
Javaには、次の4種類のアクセス修飾子があります。
ここで、それぞれについて詳しく見ていきましょう。
デフォルトのアクセス修飾子は、package-privateとも呼ばれます。 これを使用して、同じパッケージ内のすべてのメンバーを表示しますが、それらには同じパッケージ内でのみアクセスできます。
クラス、メソッド、またはデータメンバーに対してアクセス修飾子が指定または宣言されていない場合、デフォルトのアクセス修飾子が自動的に使用されることに注意してください。
デフォルトのアクセス修飾子を使用する方法の例を次に示します。
class SampleClass
{
void output()
{
System.out.println("Hello World! This is an Introduction to OOP - Beginner's guide.");
}
}
class Main
{
public static void main(String args[])
{
SampleClass obj = new SampleClass();
obj.output();
}
}
次に、このコードが何をしているのか見てみましょう。
void output()
:アクセス修飾子がない場合、プログラムは自動的にデフォルトの修飾子を使用します。
SampleClass obj = new SampleClass();
:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスにアクセスできます。
obj.output();
:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスメソッドにアクセスできます。
出力は次のとおりHello World! This is an Introduction to OOP - Beginner's guide.
です。
パブリックアクセス修飾子を使用すると、クラス、メソッド、またはデータフィールドにJavaプログラムの任意のクラスまたはパッケージからアクセスできます。パブリックアクセス修飾子は、パッケージ内およびパッケージ外からアクセスできます。
一般に、パブリックアクセス修飾子はエンティティをまったく制限しません。
パブリックアクセス修飾子の使用方法の例を次に示します。
// Car.java file
// public class
public class Car {
// public variable
public int tireCount;
// public method
public void display() {
System.out.println("I am a Car.");
System.out.println("I have " + tireCount + " tires.");
}
}
// Main.java
public class Main {
public static void main( String[] args ) {
// accessing the public class
Car car = new Car();
// accessing the public variable
car.tireCount = 4;
// accessing the public method
car.display();
}
}
出力:
I am a Car.
I have 4 tires.
次に、そのコードで何が起こっているかを見てみましょう。
上記の例では、
Car
には、メインクラスからアクセスします。tireCount
は、Mainクラスからアクセスされます。display()
は、Mainクラスからアクセスされます。プライベートアクセス修飾子は、アクセシビリティレベルが最も低いアクセス修飾子です。これは、privateとして宣言されたメソッドとフィールドがクラスの外部からアクセスできないことを意味します。これらは、これらのプライベートエンティティをメンバーとして持つクラス内でのみアクセスできます。
また、クラスのサブクラスにもプライベートエンティティが表示されないことに注意してください。
クラスの外部でprivateと宣言された変数とメソッドにアクセスしようとするとどうなるかの例を次に示します。
class SampleClass
{
private String activity;
}
public class Main
{
public static void main(String[] main)
{
SampleClass task = new SampleClass();
task.activity = "We are learning the core concepts of OOP.";
}
}
さて、ここで何が起こっているのですか?
private String activity
:プライベートアクセス修飾子は、変数「アクティビティ」をプライベートにします。SampleClass task = new SampleClass();
:SampleClassのオブジェクトを作成しました。task.activity = "We are learning the core concepts of OOP.";
:このコード行では、別のクラスからプライベート変数とフィールドにアクセスしようとしています(プライベートアクセス修飾子のためにアクセスできません)。上記のプログラムを実行すると、次のエラーが発生します。
Main.java:49: error: activity has private access in SampleClass
task.activity = "We are learning the core concepts of OOP.";
^
1 error
これは、別のクラスからプライベート変数とフィールドにアクセスしようとしているためです。
したがって、これらのプライベート変数にアクセスする最良の方法は、getterメソッドとsetterメソッドを使用することです。
ゲッターとセッターは、特にクラスを作成するときにデータを保護するために使用されます。インスタンス変数ごとにgetterメソッドを作成すると、setterメソッドがその値を設定している間、メソッドはその値を返します。
gettersメソッドとsettersメソッドを使用してプライベート変数にアクセスする方法を見てみましょう。
class SampleClass
{
private String task;
// This is the getter method.
public String getTask()
{
return this.task;
}
// This is the setter method.
public void setTask(String task)
{
this.task= task;
}
}
public class Main
{
public static void main(String[] main)
{
SampleClass task = new SampleClass();
// We want to access the private variable using the getter and setter.
task.setTask("We are learning the core concepts of OOP.");
System.out.println(task.getTask());
}
}
上記のプログラムを実行すると、次のようになります。
We are learning the core concepts of OOP.
上記の例で名前が付けられたプライベート変数があるため、外部クラスから変数にアクセスするためにtask
メソッドを使用しgetTask()
ました。setTask()
これらのメソッドは、Javaではgetterおよびsetterと呼ばれます。
セッターメソッド(setTask()
)を使用して変数に値を割り当て、ゲッターメソッド(getTask()
)を使用して変数にアクセスしました。
キーワードの詳細については、this
こちらの記事をご覧ください。
メソッドとデータメンバーが宣言さprotected
れると、同じパッケージ内およびサブクラスからそれらにアクセスできます。
protected
アクセス修飾子は、デフォルトのアクセス修飾子となんらかの形で似ているとも言え ます。サブクラスでの可視性という1つの例外があるだけです。
クラスは保護されていると宣言できないことに注意してください。このアクセス修飾子は通常、親子関係で使用されます。
保護されたアクセス修飾子を使用する方法を見てみましょう。
// Multiplication.java
package learners;
public class Multiplication
{
protected int multiplyTwoNumbers(int a, int b)
{
return a*b;
}
}
// Test.java
package javalearners;
import learners.*;
class Test extends Multiplication
{
public static void main(String args[])
{
Test obj = new Test();
System.out.println(obj.multiplyTwoNumbers(2, 4));
}
} //output: 8
このコードは何をしているのですか?
この例で Test
は、別のパッケージに存在するクラスは multiplyTwoNumbers()
、保護されていると宣言されているメソッドを呼び出すことができます。
このメソッドは、Test
クラスがクラスAdditionを拡張し、修飾子がサブクラス(任意のパッケージ)のメンバーprotected
へのアクセスを許可するため、これを行うことができます。protected
Javaのコンストラクターは、新しく作成されたオブジェクトを初期化するために使用するメソッドです。
public class Main {
int a;
public Main() {
a = 3 * 3;
}
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.a);
}
}
では、このコードで何が起こっているのでしょうか?
Main
クラスを作成することから始めました。a
。a
宣言した変数の初期値を設定しました。変数a
の値は9になります。プログラムは3x3を取ります。これは9に相当します。変数には、任意の値を自由に割り当てることができますa
。(プログラミングでは、記号「*」は乗算を意味します)。すべてのJavaプログラムは、main()
メソッドで実行を開始します。したがって、を使用しましたpublic static void main(String[] args)
。これは、プログラムが実行を開始するポイントです。つまり、このmain()
メソッドはすべてのJavaプログラムのエントリポイントです。
main()
次に、メソッド内のすべてのキーワードが何をするかを説明します。
publicキーワードはアクセス修飾子です。その役割は、メソッドにアクセスできる場所と、メソッドにアクセスできるユーザーを指定することです。したがって、main()
メソッドを公開すると、グローバルに利用できるようになります。つまり、プログラムのすべての部分にアクセスできるようになります。
メソッドがstaticキーワードで宣言されている場合、それは静的メソッドと呼ばれます。したがって、Javamain()
メソッドは常に静的であるため、コンパイラは、クラスのオブジェクトの作成なしまたは作成前にJavaメソッドを呼び出すことができます。
main()
メソッドが非静的であることが許可されている場合、Java仮想マシンはmain()
メソッドの呼び出し中にそのクラスをインスタンス化する必要があります。
main()
staticキーワードは、Java仮想マシンによってメソッドを呼び出すためだけに宣言されたオブジェクトによって使用されたはずの不要なメモリの浪費を節約するためにも重要です。
voidキーワードは、メソッドが何も返さないことを指定するために使用されるキーワードです。メソッドが何も返すことが期待されていない場合は常に、main()
その戻り型は無効です。つまり、これは、main()
メソッドが終了するとすぐに、Javaプログラムも終了することを意味します。
Mainは、Javaのmainメソッドの名前です。これは、Java仮想マシンがJavaプログラムの開始点として探す識別子です。
String[] args
これは、Javaコマンドライン引数を格納する文字列の配列です。
次のステップは、クラスMainのオブジェクトを作成することです。クラスコンストラクターを呼び出す関数呼び出しを作成しました。
最後のステップは、の値a
9を出力することです。
メソッドは、特定のタスクを実行するコードのブロックです。Javaではメソッドという用語を使用しますが、C ++などの他のプログラミング言語では、同じメソッドが一般に関数として知られています。
Javaには、次の2種類のメソッドがあります。
Javaでメソッドを使用する方法の例を示します。
class Main {
// create a method
public int divideNumbers(int x, int y) {
int division = x / y;
// return value
return division;
}
public static void main(String[] args) {
int firstNumber = 4;
int secondNumber = 2;
// create an object of Main
Main obj = new Main();
// calling method
int result = obj.divideNumbers(firstNumber, secondNumber);
System.out.println("Dividing " + firstNumber + " by " + secondNumber + " is: " + result);
}
}
出力:
Dividing 4 by 2 is: 2
上記の例では、という名前のメソッドを作成しましたdivideNumbers()
。このメソッドは2つのパラメーターxとyを取り、2つの引数firstNumber
とを渡してメソッドを呼び出しましたsecondNumber
。
Javaの基本をいくつか理解したところで、オブジェクト指向プログラミングの原則をもう少し詳しく見ていきましょう。
オブジェクト指向プログラミングパラダイムには、4つの主要な原則があります。これらの原則は、オブジェクト指向プログラミングの柱としても知られています。
オブジェクト指向プログラミングの4つの主要な原則は次のとおりです。
カプセル化とは、データを1つのユニットにまとめることです。簡単に言えば、これは多かれ少なかれ、このシールドの外側のコードがデータにアクセスするのを防ぐ保護シールドのようなものです。
カプセル化の簡単な例はランドセルです。ランドセルは、本、ペン、鉛筆、定規など、すべてのアイテムを1か所に安全に保管できます。
プログラミングにおける情報隠蔽またはデータ隠蔽とは、プログラム全体の不注意による変更からデータまたは情報を保護することです。これは強力なオブジェクト指向プログラミング機能であり、カプセル化と密接に関連しています。
カプセル化の背後にある考え方は、「機密」データをユーザーから確実に隠すことです。これを実現するには、次のことを行う必要があります。
private
。get
とメソッドを提供します。setprivate
覚えているように、private
変数は同じクラス内でのみアクセスでき、外部クラスはそれらにアクセスできません。get
ただし、パブリックメソッドとメソッドを提供すればアクセスできますset
。
get
およびset
メソッドがどのように機能するかを示す追加の例を示します。
public class Student {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
継承により、クラスは他のクラスの属性とメソッドを継承できます。これは、親クラスが属性と動作を子クラスに拡張することを意味します。継承は再利用性をサポートします。
継承という用語を説明する簡単な例は、人間は(一般に)話す、呼吸する、食べる、飲むなどの能力など、クラス「人間」から特定のプロパティを継承することです。
「継承の概念」は次の2つのカテゴリに分類されます。
クラスから継承するには、extends
キーワードを使用します。
以下の例では、JerryTheMouse
クラスからメソッドとフィールドを継承してクラスを作成していますAnimal
。
JerryTheMouse
はサブクラスでAnimal
あり、はスーパークラスです。
class Animal {
// field and method of the parent class
String name;
public void eat() {
System.out.println("I can eat");
}
}
// inherit from Animal
class JerryTheMouse extends Animal {
// new method in subclass
public void display() {
System.out.println("My name is " + name);
}
}
class Main {
public static void main(String[] args) {
// create an object of the subclass
JerryTheMouse labrador = new JerryTheMouse();
// access field of superclass
mouse.name = "Jerry, the mouse";
mouse.display();
// call method of superclass
// using object of subclass
mouse.eat();
}
}
出力:
My name is Jerry
I can eat
抽象化は、オブジェクト指向プログラミングの概念であり、重要な属性のみを表示し、コード内の不要な情報を非表示にすることができます。抽象化の主な目的は、ユーザーから不要な詳細を隠すことです。
抽象化を説明する簡単な例は、電子メールを送信するときに関係するプロセスについて考えることです。電子メールを送信すると、送信直後に何が起こるか、サーバーが使用するプロトコルなどの複雑な詳細が隠されます。
電子メールを送信するときは、受信者の電子メールアドレス、電子メールの件名を入力し、内容を入力して、[送信]をクリックするだけです。
抽象クラスまたはインターフェースを使用して、ものを抽象化できます。
キーワードはabstract
非アクセス修飾子であり、クラスとメソッドに使用されます。
abstract
キーワードを使用して抽象メソッドを作成します。抽象メソッドの本体は、サブクラス(から継承)によって提供されます。
例:
// Abstract class
abstract class Animal {
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep() {
System.out.println("Zzzz");
}
}
// Subclass (inherit from Animal)
class Cow extends Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The cow says: Moo");
}
}
class Main {
public static void main(String[] args) {
Cow myCow = new Cow(); // Create a Cow object
myCow.animalSound();
myCow.sleep();
}
}
ポリモーフィズムとは、オブジェクトがさまざまな形をとる能力を指します。ポリモーフィズムは通常、継承によって相互に関連する多くのクラスがある場合に発生します。
ポリモーフィズムは、人が同時に異なる特性を持つことができる方法に似ています。
たとえば、男性は、父親、祖父、夫、従業員など、すべて同時になることができます。したがって、同じ人がさまざまな状況でさまざまな特性や行動を持っています。
例:
オブジェクトCowとCatを作成しanimalSound()
、それぞれでメソッドを呼び出します。
class Animal {
public void animalSound() {
System.out.println("An animal can make a sound.");
}
}
class Cow extends Animal {
public void animalSound() {
System.out.println("A cow says: Moooo");
}
}
class Cat extends Animal {
public void animalSound() {
System.out.println("A cat says: Meeooww");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myCow = new Cow();
Animal myCat = new Cat();
myAnimal.animalSound();
myCow.animalSound();
myCat.animalSound();
}
}
継承とポリモーフィズムは、コードの再利用に非常に役立ちます。新しいクラスを作成するときに、既存のクラスの属性とメソッドを再利用できます。
Aninterface
は抽象的なメソッドのコレクションです。言い換えると、anは、関連するメソッドを空の本体でグループ化するために使用されるinterface
完全に「抽象クラス」です。
インターフェイスは、クラスが実行できることを指定しますが、クラスが実行できる方法は指定しません。
例:
// create an interface
interface Language {
void getName(String name);
}
// class implements interface
class ProgrammingLanguage implements Language {
// implementation of abstract method
public void getName(String name) {
System.out.println("One of my favorite programming languages is: " + name);
}
}
class Main {
public static void main(String[] args) {
ProgrammingLanguage language = new ProgrammingLanguage();
language.getName("Java");
}
}
出力:
One of my favorite programming languages is: Java
この記事では、オブジェクト指向プログラミングの主な概念のいくつかを見てきました。これらの概念を上手に使い、優れたコードを書きたい場合は、これらの概念をよく理解することが不可欠です。
この記事がお役に立てば幸いです。
私の名前はPatrickCyubahiroです。ソフトウェアとウェブの開発者、UI / UXデザイナー、テクニカルライター、コミュニティビルダーです。
Twitterで私と連絡してください:@ Pat_Cyubahiro、または次のアドレスに書いてください:ampatrickcyubahiro [at] gmail.com
読んでくれてありがとう!
ソース:https ://www.freecodecamp.org/news/object-Oriented-programming-concepts-java/