抽象クラスとインタフェースの違いを理解しよう!
抽象クラスとインタフェースの違いを理解しよう!
きっと良く使う奴らが、いざ使おうとすれば、忘れてしまって困る時がある。
今回は、抽象クラスとインタフェースの違いを理解しましょう。
抽象クラス???
まず、抽象クラス(abstract class)は何ものから始めます。
抽象クラスは、簡単に言うと、【未完成のクラス】です。
→ 【未完成のMethod】を持っています。
抽象クラスは、
一人では、Classの役割を果たしませんが、
新しいClassを作成するため、Basic Classとなる親クラス(Super Class)として重要な意味を持っています。
一つの例を、準備しました。
図形の広さは求める例です。
Shapeという抽象クラスは、【図形の広さを求める】という抽象的な機能のみを定義します。
以後、サブクラスはどのように実装するかを定義します。
abstract class Shape {
abstract void draw(double a, double b);
}
class Circle extends Shape {
void draw(double r1, double r2) {
System.out.println("Circle : " + (3.14 * r1 * r2));
}
class Rectangle extends Shape {
void draw(double h, double v) {
System.out.println("Rectangle : " + (h * v));
}
class Triangle extends Shape {
void draw(double a, double h) {
System.out.println("Triangle : " + (a * h / 2));
}
public class AbstractTest
{
public static void main(String args[]) {
Circle c = new Circle();
c.draw(5.0, 5.0);
Rectangle r = new Rectangle();
r.draw(5.0, 10.0);
Triangle t = new Triangle();
t.draw(5.0, 10.0);
Shape s = new Circle();
s.draw(5.0, 5.0);
}
}
インタフェース???
インタフェースは、抽象クラスの友達です。
一種の抽象クラスですが、抽象クラスよりもっと抽象的です。
クラスでインタフェースを使用するためにimplementsを使います。
また、面倒くさいですが、インタフェースには色んな制約があります。
- すべてのメンバ変数は、public static finalでなければならない。(省略できる)
- すべてのメソッドは、public abstractでなければならない。(省略できる)
public interface TV{
public int MAX_VOLUME = 100;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
public void changeChannel(int channel);
}
TV.javaを作りました。
抽象メソッドと定数を定義することができます。
public class LedTV implements TV
{
public void on(){
System.out.println("TV ON");
}
public void off(){
System.out.println("TV OFF");
}
public void volume(int value){
System.out.println(value + "volume Setting.");
}
public void channel(int number){
System.out.println(number + "channel Setting.");
}
}
public class Test{
public static void main(String args[]){
TV tv = new LedTV();
tv.on();
tv.volume(50);
tv.channel(6);
tv.off();
}
}
もしTVインタフェースを実装するLcdTVを作成した場合には、
new LedTV部分だけnew LcdTVに変更しても、同じようにプログラムが動作できます。
抽象クラスとインタフェースの共通点
- 抽象クラスとインタフェースは、宣言だけあって実装内容がない。
- 自分自身がnewを使用してオブジェクトを生成することができず、継承された子だけがオブジェクトを生成することができる。
- 継承されたクラスが実装を必ずするようにすべきときに使用する。
抽象クラスとインタフェースの違い
インタフェース | 抽象クラス |
---|---|
実装オブジェクトに同じ動作を保証するため | 機能を利用して、拡張させるため |
多重継承が可能 | 多重継承は不可能 |
抽象メソッドのみ可能 | 一般メソッド+抽象メソッド可能 |
Author And Source
この問題について(抽象クラスとインタフェースの違いを理解しよう!), 我々は、より多くの情報をここで見つけました https://qiita.com/ozlee/items/61eca20866ef42288218著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .