Java publicの使い方

この記事のポイント

この記事では、Java言語における重要な概念の一つであるpublicアクセス修飾子について、基礎から応用まで幅広く解説します。

  • どこからでもアクセス可能にするJavaのpublic修飾子の仕組み
  • クラスやメソッドでの具体的な使用方法
  • 実際の開発現場で活用される実践的なコーディング手法

これらのポイントを理解することで、Javaプログラミングにおけるアクセス制御の基本をしっかりと身に付けることができるでしょう。

目次

publicとは?

Javaのpublicは、アクセス修飾子の一種です。アクセス修飾子は、クラスやメソッド、変数がどの範囲から参照できるかを決めるために用います。Javaにはprivate、protected、package-privateといったアクセス修飾子がありますが、最も制限が緩いのがpublicです。

publicを付与すると、同一パッケージかどうかを問わず、すべてのクラスからアクセスできます。この特性から、ライブラリの公開インターフェースや、他のクラスと連携を前提とした場面で、頻繁に使用されます。

【関連】
Javaをもっと詳しく学ぶならpaizaラーニング

基本構文

Javaのpublicの基本的な記述方法は、クラス、メソッド、変数の定義時にpublicキーワードを最初に記述することです。ただし、Javaでは 1つのファイルに定義できる public クラスは1つまで という仕様があります。今回はファイル分割できない実行環境に対応するため、Animal クラスの public を省略しています。

class Animal { public void speak() { System.out.println("なにか鳴いています"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); animal.speak(); } }

出力結果

なにか鳴いています

ファイルを分ける場合、Animalクラスにpublicを付与することで、どこからでもこのクラスを参照できます。また、nameフィールドとspeakメソッドもpublicのため、外部のクラスから直接アクセス可能です。

class Animal { public String name; public void speak() { System.out.println(name + " が鳴いています"); } } public class Main { public static void main(String[] args) { Animal cat = new Animal(); cat.name = "ニャンコ"; cat.speak(); } }

出力結果

ニャンコ が鳴いています

mainメソッドもpublic staticで宣言されており、これによりJavaの実行環境がプログラムを開始できるようになります。public修飾子は、プログラムの外部インターフェースを定義する際の基本的な仕組みとして機能しています。

実用例

ここからはJavaのpublicを、実務を意識したサンプルコードを用いて解説します。サンプルを読み進めることで、publicがどのような状況で必要になるのかを理解できる構成です。

各コード例は、動物をテーマにしたわかりやすい内容になっています。また、サンプルには、コードの動作概要と詳細な解説を付けていますので、Javaプログラミングが初めての方でも安心して学習を進めることができます。

publicクラスとインスタンス変数の基本利用

このコードは、public フィールドと public メソッドを持つクラスを定義し、別のクラスからそれらにアクセスする基本的な例です。

class Dog { public String breed; public int age; public void bark() { System.out.println(age + "歳の" + breed + "がワンワンと吠えています"); } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.breed = "柴犬"; dog.age = 3; dog.bark(); } }

出力結果

3歳の柴犬がワンワンと吠えています

このサンプルでは、Dogクラスのbreedとageフィールドをpublicで宣言しているため、他のクラスから直接値を設定したり取得したりできます。barkメソッドもpublicなので、どこからでも呼び出し可能です。

実際の開発では、データの整合性を保つためにprivateを使用することも多いですが、publicは最もシンプルなアクセス方法として理解しておくことが大切です。

publicメソッドによるデータ操作

publicメソッドを使って、クラス内のデータを安全に操作する方法を示すコードです。

class Cat { private String name; public void setName(String newName) { this.name = newName; } public String getName() { return this.name; } public void introduce() { System.out.println("私の名前は" + name + "です"); } } public class Main { public static void main(String[] args) { Cat cat = new Cat(); cat.setName("タマ"); cat.introduce(); } }

出力結果

私の名前はタマです

このコードでは、nameフィールドはprivateで隠蔽し、publicメソッドを通じてアクセスするパターンを採用しています。setNameメソッドで値を設定し、getNameメソッドで値を取得できます。

このようなpublicメソッドによるデータアクセスは、カプセル化の基本的な実装方法として広く使われています。

publicコンストラクタの活用

publicコンストラクタを使ってオブジェクトの初期化を行うコードの例です。

class Bird { public String species; public boolean canFly; public Bird(String species, boolean canFly) { this.species = species; this.canFly = canFly; } public void displayInfo() { System.out.println(species + "は飛ぶことが" + (canFly ? "できます" : "できません")); } } public class Main { public static void main(String[] args) { Bird bird = new Bird("ペンギン", false); bird.displayInfo(); } }

出力結果

ペンギンは飛ぶことができません

publicコンストラクタにより、外部のクラスからBirdオブジェクトを作成する際に必要な情報を渡すことができます。コンストラクタもメソッドの一種ですが、特にオブジェクト生成時の初期設定を担う役割があります。このような設計により、作成されるオブジェクトの状態を確実に初期化できます。

publicスタティックメソッドの実装

クラスのインスタンスを作成せずに呼び出せるpublicスタティックメソッドの例です。

class AnimalUtil { public static String getAnimalSound(String animal) { switch (animal) { case "イヌ": return "ワンワン"; case "ネコ": return "ニャーニャー"; default: return "不明な鳴き声"; } } public static void printSound(String animal) { System.out.println(animal + "の鳴き声は" + getAnimalSound(animal) + "です"); } } public class Main { public static void main(String[] args) { AnimalUtil.printSound("イヌ"); } }

出力結果

イヌの鳴き声はワンワンです

publicスタティックメソッドは、クラス名を使って直接呼び出すことができるため、ユーティリティ機能の実装によく使用されます。オブジェクトのインスタンス化が不要で、メモリ効率も良いという特徴があります。このパターンは、共通的な処理をまとめて提供する際の標準的な手法です。

publicインターフェースの実装

インターフェースを定義し、それを実装するクラスのサンプルです。ファイル分割できない環境への対応を踏まえ、Movableインターフェース自体は publicを省略しました。

interface Movable { void move(); void stop(); } class Fish implements Movable { public void move() { System.out.println("サカナが泳いでいます"); } public void stop() { System.out.println("サカナが止まりました"); } } public class Main { public static void main(String[] args) { Movable movable = new Fish(); movable.move(); movable.stop(); } }

出力結果

サカナが泳いでいます
サカナが止まりました

インターフェースは、複数のクラスが共通して持つべき機能を定義します。インターフェースで宣言されたメソッドは暗黙的にpublicとなるため、実装クラス(Fish)でも必ず public を付与してオーバーライドすることが必要です。

なお、本サンプルでは1ファイルにまとめる制約上、インターフェースの public 修飾子を省略していますが、実務で別ファイルに分ける際は public interface として定義するのが一般的です。

publicクラスの継承関係

public修飾子を使った継承関係の実装を紹介します。ファイル分割できない環境への対応を踏まえ、class Animalは publicを省略しました。

class Animal { public String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + "が食べています"); } } class Rabbit extends Animal { public Rabbit(String name) { super(name); } public void jump() { System.out.println(name + "がぴょんぴょん跳ねています"); } } public class Main { public static void main(String[] args) { Rabbit rabbit = new Rabbit("ウサギ"); rabbit.eat(); rabbit.jump(); } }

出力結果

ウサギが食べています
ウサギがぴょんぴょん跳ねています

publicクラスを継承することで、親クラスのpublicメンバーにアクセスできるようになります。この例では、RabbitクラスがAnimalクラスを継承し、親クラスのnameフィールドとeatメソッドを利用できています。継承により、コードの再利用性と保守性が向上します。

public配列とコレクションの操作

public修飾子を使った配列やコレクションの操作例を示します。

import java.util.ArrayList; class Zoo { public ArrayList<String> animals; public Zoo() { animals = new ArrayList<>(); } public void addAnimal(String animal) { animals.add(animal); System.out.println(animal + "を動物園に追加しました"); } public void showAnimals() { System.out.println("動物園の動物たち: " + animals); } } public class Main { public static void main(String[] args) { Zoo zoo = new Zoo(); zoo.addAnimal("ゾウ"); zoo.showAnimals(); } }

出力結果

ゾウを動物園に追加しました
動物園の動物たち: [ゾウ]

publicフィールドとしてコレクションを持つことで、外部のクラスから動物園の動物リストにアクセスできます。ただし、実際の開発では、データの整合性を保つためにprivateフィールドとpublicメソッドを組み合わせることが一般的です。

このサンプルは、publicの動作を理解するための学習用の例として活用してください。

まとめ

Javaのpublicは、クラスやメソッドの公開範囲を示す修飾子です。publicを付与すると、その要素はすべてのクラスからアクセス可能になります。クラス間で機能を共有する場面で頻繁に登場するため、実務では欠かせません。特に、外部から利用されるAPIやライブラリの公開インターフェースで重要な役割を担います。

publicの活躍する場面

  • ライブラリやフレームワークの公開API設計時
  • メインメソッドなどプログラムのエントリーポイント定義時
  • 他のパッケージからアクセスされる共通機能の提供時

重要なポイント

  • 最も制限の緩いアクセス修飾子として機能すること
  • クラス、メソッド、フィールドのどこにでも適用可能であること
  • カプセル化の観点から適切な使い分けが必要であること

public修飾子を適切に使用することで、保守性と再利用性の高いプログラムを作成できます。一方で、すべての要素をpublicにすることは望ましくありません。外部からの利用が必要な部分に限定して指定することが、設計上の基本です。

今回学んだ知識を基に、実際のプログラミングでもpublicアクセス修飾子を効果的に活用していきましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェック

  1. paizaラーニングトップ
  2. リファレンス
  3. Javaのリファレンス記事一覧
  4. Java publicの使い方