网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月28日漏签0天
东方编程学习馆吧 关注:6,461贴子:18,431
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 7回复贴,共1页
<<返回东方编程学...吧
>0< 加载中...

JAVA言语入门28-インターフェイス

  • 只看楼主
  • 收藏

  • 回复
  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
『多重継承とインターフェイス』
Java言語のオブジェクト指向、及びポリモーフィズムでは「インターフェイス」という技術が非常に重要です
Java言語のインターフェイスは「多重継承」をサポートするものです
これまで、あるクラスを継承しサブクラスとして拡張することができました
しかし、二つ以上のクラスをひとつのサブクラスに拡張することはできません
ひとつのサブクラスが二つのスーパークラスを拡張することを多重継承といいます
これはC++の技術で、Java言語は多重継承ができないのです
多重継承では、様々な実装の問題があります
最初にあげられるのが、名前の重複です
二つのスーパークラスに同じシグネチャのメソッドなのが存在する場合、曖昧になってしまいます
さらに、その二つのスーパークラスが同じひとつのクラスを拡張していたのならば……
C++では、この問題をvirtualなどで解決しています
Java言語では、先ほども言ったとおり多重継承はできません



  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
サブクラスのスーパークラスは必ずひとつしかありません
そこで、クラスにメソッドを多重継承する役割を持つのがインターフェイスなのです
インターフェイスは抽象クラスによく似ているといわれます
なぜならば、インターフェイスには実装は無く宣言だけが存在するからです
インターフェイスは、いわばメソッドの宣言をする場所なのです
インターフェイスの宣言は次のような書式になります
interface intfName {
type metName(Param);
...
}
intfNameにはインターフェイス名です。metNameはメソッド名、Paramはパラメータを宣言します
interfaceの前に、アクセス権を指定する修飾子 public を指定することもできます
アクセス権とその修飾子については、後ほど詳しくお話します
この場ではpublicはどこからでも呼び出せるインタフェイスであることを表すと覚えてください
メソッドでもアクセス権限の修飾子の指定は可能です
デフォルトでインターフェイスメソッドはpublic abstractです
これが、インターフェイスメソッドの役割なので、通常は修飾子を指定することはありません



2025-06-28 17:59:05
广告
  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ただし、インターフェイスメソッドを実装するときに public であることを意識する必要があります
これだけでは、メソッドの宣言だけなので抽象クラスにそっくりですね
問題はどうインターフェイスの宣言を実装するかです
インターフェイスで宣言されたメソッドを定義するには、クラスにインターフェイスを実装する必要があります
クラスにインターフェイスを実装するには inpliments キーワードを使用します
class clsName implements intfName1 , intfName2...
clsNameは、定義するクラス名です
intfName1 , intfName2...は実装するインターフェイスの指定をします
ここで指定されるインターフェイスは、当然複数指定することができます
classの前に修飾子を指定したり、clsName の後に extends キーワードでスーパークラスを拡張しても良いです
public class clsName extends super_class implements intfName1 , ...
重要なのは、クラスにインターフェイスが実装された場合
インターフェイスで宣言されているメソッドを必ず全て定義しなければならないことです
定義しなかった場合、コンパイルすることができません



  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

クラスは複数のインターフェイスを実装することができます
とうぜん、extendsで同時に他のクラスを拡張することも可能です
次のプログラムでは、super_classを拡張し、さらにインターフェイスを実装しています

interfaceには、もう一つの使い方があります
interfaceではメソッド以外に、変数を定数として宣言することもできます
なぜならば、インターフェイスで宣言された変数はデフォルトでpublic static finalなのです
これは設計とは異なる使い方のようですが、便利なプログラムテクニックとされています
呼び出しには、次のようにアクセスします
intfName.var;
intfNameはインターフェイス名を、varには変数名を指定します 
普通は、インターフェイスの変数に修飾子は指定されません
インターフェイスでの変数の宣言方法は、これまでのメンバ変数の宣言と同じです
何も修飾子を指定しなくても、public static final であることを忘れないでください
Javaでは、一連の関連する定数郡をインターフェイスでまとめて宣言することができるのです

インターフェイスの定数は、publicでstaticなので、implementの必要はありません


  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
『インターフェイスの継承』
さらに、インターフェイスはextendsキーワードを使用して拡張することができます
インターフェイスの継承は、クラスの継承と異なり多重継承が可能です
これは、インターフェイスが宣言に専念したため可能になったことです
インターフェイスも、拡張されたインターフェイスのことをスーパーインターフェイスと呼びます
異なる複数のスーパーインターフェイスに同名の変数が存在した場合コンパイルエラーが発生します
メソッドに関しては、実装がないので同じ構文のメソッドが存在してもかまいませんが
戻り値の型が同一でなくてはいけません
異なっていた場合はやはりエラーになります
インターフェイスの継承は、次のように記述します
interface intfName extends sprIntf1 , sprIntfN... {
}
intfNameにはインターフェイス名を指定します
sprIntfには、スーパーインターフェイスを指定します
sprIntfは複数のインターフェイスを指定することができます
その場合は、各インターフェイス名をカンマ「 , 」で区切ります

インターフェイスCは、スーパーインターフェイスA , Bを拡張しています
つまり、インターフェイスCは A , B の宣言を引き継いでいることになります
これをクラスEVAでインプリメントしているので、main()メソッドの動作は正常に行われます


  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
interface
インターフェイスの宣言をします
インターフェイスは他のインターフェイスをinplementsすることはできません
インターフェイスは、クラスで実装するメソッドの宣言を行います
また、インターフェイスで定義された変数は、定数として扱うことができます
インターフェイスのメソッドはfinalやstatic修飾子は使用できません
implements
クラスの宣言時に使用します
ひとつ、または複数のインターフェイスをインプリメントします
複数のインターフェイスをインプリメントする場合、各インターフェイスをカンマ「 , 」で区切ります
必ず extends clsName によるクラスの継承よりも後に指定します



  • 神宫寺铃香
  • 富有美誉
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
わざわざ図を発表しお疲れ様~


  • 雾雨魔理沙㊣
  • 赫赫有名
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不用这种方式,会总是三天两头就被度娘吃掉~~


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回东方编程学...吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示