Java開発では、小規模なシステム開発でも1つのクラスで完結することはほとんどなく、様々なクラスを連携させてシステムを構築していきます。
本記事では、複数クラスを連携させる際の呼び出し方法について、色々なパターンで確認していきたいと思います。
目次
Javaで別クラスのpublicメソッドを呼び出す方法
publicメソッドは、自由に外部クラスから呼び出すことが可能です。
同一クラスファイルから呼び出す
まずは簡単に同一クラスファイルに定義されたクラスを呼び出すサンプルを確認してみましょう。
Main.java
package sample; public class Main { public static void main(String[] args) { Sub sub = new Sub(); sub.publicMethod(); } } class Sub { public void publicMethod() { System.out.println("publicMethodから出力しています。"); } }
実行した結果が下記です。
publicMethodから出力しています。
6行目のようにインスタンス化を実施する必要はありますが、外部クラスからpublicメソッドを呼び出すことが可能です。
別階層のクラスファイルから呼び出す
今度は別ファイルに記述されたクラスの処理を呼びだすサンプルコードで確認してみます。
Main.java
package sample; import sample.subDir.Sub; public class Main { public static void main(String[] args) { Sub sub = new Sub(); sub.publicMethod(); } }
Sub.java
package sample.subDir; public class Sub { public void publicMethod() { System.out.println("publicMethodから出力しています。"); } }
実行結果が下記です。
publicMethodから出力しています。
3行目のimport文で、クラスファイルが格納されているsubDirフォルダを参照するように設定します。
import文の設定を実施しないと下記のようなエラーが発生するため注意が必要です。
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Sub を型に解決できません
Javaで別クラスのstaticメソッドを呼び出す方法
今度は別クラスで定義されたstaticメソッド(クラスメソッド)を呼び出す方法を確認してみましょう。
staticメソッドの呼び出し
staticで定義されたメソッドは、呼び出し元でインスタンス化を実施する必要がありません。
Main.java
package sample; public class Main { public static void main(String[] args) { Sub.staticMethod(); } } class Sub { public static void staticMethod() { System.out.println("staticMethodから出力しています。"); } }
実行結果が下記です。
staticMethodから出力しています。
6行目でインスタンス化をせず、直接別クラスのメソッドを呼び出していますが、staticメソッドの場合には実行出来ていることがご確認頂けます。
インスタンスメソッドの呼び出し方法でも実行は可能
基本的には上述した方法でクラスメソッドの呼び出しを行いますが、実はインスタンスメソッドと同じ方法でもクラスメソッドは実行することが可能です。
package sample; public class Main { public static void main(String[] args) { Sub sub = new Sub(); sub.staticMethod(); } } class Sub { public static void staticMethod() { System.out.println("staticMethodから出力しています。"); } }
実行結果が下記です。
staticMethodから出力しています。
Javaで別クラスのprotectedメソッドを呼び出す方法
アクセス修飾子protectedが設定されたメソッドを呼び出す方法についても合わせて確認しておきましょう。
同一ディレクトリ内
同一ディレクトリ内の場合、特に指定なくpublicメソッドのようにアクセスすることが可能です。
Main.java
package sample; public class Main { public static void main(String[] args) { Sub sub = new Sub(); sub.protectedMethod(); } } class Sub { protected void protectedMethod() { System.out.println("protectedMethodから出力しています。"); } }
実行結果が下記です。
protectedMethodから出力しています。
異なるディレクトリ
異なるディレクトリに格納されたクラスのメソッドを呼び出す場合、newで明示的に生成した継承先クラスのインスタンスからメソッドを呼び出す必要があります。
Main.java
package sample; import sample.subDir.Sub; public class Main extends Sub { public static void main(String[] args) { Main main = new Main(); main.execute(); } private void execute() { this.protectedMethod(); } }
Sub.java
package sample.subDir; public class Sub { protected void protectedMethod() { System.out.println("protectedMethodから出力しています。"); } }
実行結果が下記です。
protectedMethodから出力しています。
同一パッケージ内の異なるディレクトリに格納されているだけなので、import文だけで実行出来そうですが、実際にはMain.javaファイルの8行目に記述したように、明示的なインスタンス化が必要となるため注意しておきましょう。
さいごに: Javaで別クラスの処理を呼び出す各種方法を把握しよう
本記事では、Javaで別クラスの処理を呼び出す方法をいくつかのパターンに分けてご紹介してきました。
アクセス修飾子やクラスメソッドとしてなど、定義方法により呼び出し元からのアクセス方法も変わってきます。
まずは利用される機会の多いpublicメソッドの呼び出し方法から、少しずつ他の方法も理解出来るよう学習を進めていきましょう。
EclipseなどのIDEでも注意喚起がされるため、推奨される方法ではありません。