2012年12月01日

≪Java≫ インターフェースの注意点

≪Java≫ インターフェースの注意点


■ インターフェースの宣言


インターフェースの宣言には、「 abstract(抽象)」が暗黙的に付加している。
以下はどちらでも問題なし。
 ・interface インターフェース名 {}
 ・abstract interface インターフェース名 {}


■ インターフェースのメソッド宣言


インターフェースのメソッド宣言には、「 public abstract 」が暗黙的に付加している。
以下はどれでも問題なし。
 ・void メソッド名();
 ・public void メソッド名();
 ・abstract void メソッド名();
 ・public abstract void メソッド名();
 ・abstract public void メソッド名();

「 public abstract 」が付いているため、
以下はコンパイルエラーとなる。
 ・static void メソッド名(); ⇒ static は abstract と一緒には付与できない
 ・final void メソッド名(); ⇒ final が付くと実装時にしなければならない「オーバーライド」できない
 ・private void メソッド名(); ⇒ アクセス修飾子は public である
 ・protected void メソッド名(); ⇒ アクセス修飾子は public である


■ インターフェースの定数宣言


インターフェースの定数宣言には、「 public static final 」が暗黙的に付加している。
以下はどれでも問題なし。
 ・static int 変数名;
 ・final int 変数名;
 ・public final int 変数名;
 ・static final int 変数名;


■ インターフェースの実装時の注意点


 @ 1つのクラスに複数のインターフェースを実装できる。
   ⇒ 継承と違って、複数のインターフェースを実装できる。
     (言い換えると、全てのインターフェースを全て実装(オーバーライド)しなければならない。
 A 一部のインターフェース(メソッド)を実装する場合は、abstract クラスにする。




≪Java≫ final について

≪Java≫ final について


・ 「変更できない」という意味の修飾子。
・ クラス、メソッド、変数の宣言時に使用する。

■ クラスで使用 ⇒ 継承できない
 (例)
   final class Hoge(){}

■ メソッドで使用 ⇒ サブクラスでオーバーライドできない
 (例)
   final int hoge(){}

■ 変数で使用 ⇒ 初期化の時に代入した値を後で変更できない
 (例)
   final int HOGE = 10;
   ※ final を使った時の変数は、大文字で書くのが慣例。




≪Java≫ static について

≪Java≫ static について


・ static の付いたフィールドやメソッドは、「クラス変数」や「クラスメソッド」と呼ばれる。
  (反対後:「インスタンス変数」や「インスタンスメソッド」 → オブジェクトの中に取り込まれて、各オブジェクト毎に存在する。
・ クラス定義( class ファイル)にひとつだけ存在する。
・ 「クラス変数」や「クラスメソッド」は総称として、静的メンバと呼ばれる。
・ クラスの中で作成された全てのオブジェクトで共有され、各オブジェクトは静的メンバに自由にアクセスできる。




ラベル:java static 静的

≪Java≫ インターフェースのルール

≪Java≫ インターフェースのルール


【メリット】


 @ 継承の場合、継承できる親クラスは1つだけだが、
   インターフェースの場合は、複数のクラスを継承するかのような効果を得ることができる。

 A インターフェースで定義する「定数」や「抽象メソッド」は、全て public であるため、外部に公開されており、複数のメンバーでシステムを開発する際に共有しやすい。


【書き方】


 interface インターフェース名 [ extends インターフェース名1、インターフェース名2、・・・ ] {
  public 定数
  public 抽象メソッド
}


【ルール】


 @ 「定数」と「抽象メソッド」のみ定義できる。
 A 定数には、
    public static final が暗黙的に付加される。(わざわざ書く必要なし)
 B 抽象メソッドには、
    public abstract が暗黙的に付加される。(わざわざ書く必要なし)
 C ファイル名は、クラスと同様、拡張子(.java)となる。
 D extends で他の複数のインターフェースを継承できる。

※A,Bはわざわざ書いても問題なし。


【実装時の書き方】


 class クラス名 [ extends クラス名 ] implements インターフェース名1、インターフェース名2、・・・  {
 クラス定義  
}


【実装時のルール】


 @ 実装するクラスは、クラスの継承と、複数のインターフェースの実装が同時に可能
 A 実装(implements)するクラスは、実装したインターフェースの抽象メソッドを全てオーバーライドしなければならない。
  (オーバーライドしない場合は、クラス自体が抽象クラスとなる)
 B インターフェースの抽象メソッドを実装する際は、必ず public を付ける。
  (インターフェース側では、public の記述がなくても、暗黙的に public が付いている)





≪メール設定≫ 各WEBメールの送受信設定 (Outlook の場合)

≪メール設定≫ 各WEBメールの送受信設定 (Outlook の場合)


● infoseek (Windows Live) の場合

 ■ 電子メールアドレス:*****@infoseek.jp

 ■ アカウント名:*****@infoseek.jp
 ■ パスワード:Windows Live のパスワード
           ↑ infoseekのパスワードと違う場合があるので注意!! もしうまくいかなければ、
http://portal.faq.rakuten.co.jp/app/answers/detail/a_id/16796
を参考にパスワードを再設定した方がよい

【受信】
 ■ サーバー名:pop3.live.com

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):995
 ■ 暗号化された接続(SSL)が必要:はい


【送信】
 ■ サーバー名:smtp.live.com

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587(暗号化がTLSの場合でも同じ)
 ■ 使用する暗号化接続の種類:SSL(またはTLS)

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。


● Yahooメール の場合


 ■ 電子メールアドレス:*****@yahoo.co.jp

 ■ アカウント名:*****(メールアドレスの@より前)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:pop.mail.yahoo.co.jp

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):110
 ■ 暗号化された接続(SSL)が必要:なし


【送信】
 ■ サーバー名:smtp.mail.yahoo.co.jp

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587
 ■ 使用する暗号化接続の種類:なし

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる


● OCNメール の場合

 ■ 電子メールアドレス:*****@#####.ocn.ne.jp (#####の部分はアカウントによって変化)

 ■ アカウント名:*****(メールアドレスの@より前の部分)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:#####.ocn.ne.jp (#####はメールアドレスの@の後ろ)

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):110
 ■ 暗号化された接続(SSL)が必要:なし


【送信】
 ■ サーバー名:smtp.vc#####.ocn.ne.jp (#####はメールアドレスの@の後ろ)

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587
 ■ 使用する暗号化接続の種類:なし

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる


● ロりポップ(独自ドメイン)

 ■ 電子メールアドレス:*****@#####.### (#####.###は独自ドメイン)

 ■ アカウント名:*****@#####.###(メールアドレスそのまま)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:pop3.lolipop.jp

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):995
 ■ 暗号化された接続(SSL)が必要:はい


【送信】
 ■ サーバー名:smtp.lolipop.jp

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):465
 ■ 使用する暗号化接続の種類:SSL

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。


● Apple ID ( @me.com や @icloud.com )

 ■ 電子メールアドレス:*****@icloud.com または *****@me.com

 ■ アカウント名:*****@#####.###(メールアドレスそのまま)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:imap.mail.me.com (@icloud.com のメールアドレスでも同じ)

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):993
 ■ 暗号化された接続(SSL)が必要:はい


【送信】
 ■ サーバー名:smtp.mail.me.com (@icloud.com のメールアドレスでも同じ)

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587 (暗号化がTLSの場合でも同じ)
 ■ 使用する暗号化接続の種類:SSL (またはTLS)

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。


● Hotmail (Windows Live)


 ■ 電子メールアドレス:*****@hotmail.co.jp

 ■ アカウント名:*****@hotmail.co.jp(メールアドレスそのまま)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:pop3.live.com

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):995
 ■ 暗号化された接続(SSL)が必要:はい


【送信】
 ■ サーバー名:smtp.live.com

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587 (暗号化がTLSの場合でも同じ)
 ■ 使用する暗号化接続の種類:SSL(またはTLS)

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。


● Gmail


 ■ 電子メールアドレス:*****@gmail.com

 ■ アカウント名:*****(メールアドレスの@より前の部分)
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:pop.gmail.com

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):995
 ■ 暗号化された接続(SSL)が必要:はい


【送信】
 ■ サーバー名:smtp.gmail.com

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587 (暗号化がTLSの場合でも同じ)
 ■ 使用する暗号化接続の種類:SSL(またはTLS)

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。


● aim.com (AOL)


 ■ 電子メールアドレス:*****@aim.com

 ■ アカウント名:*****aim.com
 ■ パスワード:そのまま

【受信】
 ■ サーバー名:pop.aim.com

 [ 詳細設定(M) ]
 ■ 受信サーバー(ポート):110
 ■ 暗号化された接続(SSL)が必要:なし


【送信】
 ■ サーバー名:smtp.aim.com

 [ 詳細設定(M) ]
 ■ 送信サーバー(ポート):587 (暗号化がTLSの場合でも同じ)
 ■ 使用する暗号化接続の種類:SSL(またはTLS)

 ■ [送信サーバ]タブ ⇒ 送信サーバ(SMTP)は認証が必要(O):チェック入れる

注:SSLを使用してエラーが発生した場合は、代わりにTLSを使用してみてください。

※ IMAP での設定も可能なようです。

IMAPのセットアップ情報
 • メールアドレス:*****@aim.com
 • IMAPのユーザー名:*****@aim.com
 • 受信メールサーバー:imap.aim.com
 • SMTP送信サーバーアドレス:smtp.aim.com
   ※ ポートを587に設定してください

 • SMTPのユーザー名:*****@aim.com
 • SMTPのパスワード:メールへのログインに使用したものと同じ

安全に接続するために、メールプログラムのIMAP/POPのSSLオプションとSMTPのTLSを確認してください。




● gooメール


  有料設定にしないと、メールソフトでの受信や、メール転送 不可
※ 他のメールアドレスへの新着通知は可能。

● exciteメール


  無料メール(BBでないメール)は、メールソフトでの受信や、メール転送 不可
※ 他のメールアドレスへの新着通知は可能。




【参考】
 [ Outlook の場合で、WEBサーバ上にメールを置いておきたい場合 ]
 ■ [ 詳細設定 ]で、「サーバーから削除する(R)」にチェックを入れる




posted by キョウ at 14:15| Comment(2) | TrackBack(0) | 3.小技(Office系) | このブログの読者になる | 更新情報をチェックする

≪Java≫ 継承した場合のデフォルトコンストラクタ(superが必要か否か)(メモ)

//スーパークラス(親クラス)
class AnimalC{
 int n;
}

//サブクラス(子クラス)
class DogC extends AnimalC{

 //オリジナルのコンストラクタ
 DogC(int n){
  this.n = n;
 }
  ↑ オリジナルのコンストラクタを書いた場合は、↓ @ を記述しないとNG

 //デフォルトコンストラクタの呼び出し
 DogC(){ super(); } --- @
  ↑ こうやって、親クラスのデフォルトコンストラクタを明示しておなかいと、実行クラスの A でコンパイルエラーになる。

}

//実行クラス
public class ExecC {
 public static void main(String[] args) {

  //親クラスのオブジェクト作成
  AnimalC a1 = new AnimalC();
   ↑ 親クラスは暗黙的にデフォルトコンストラクタがあるので、問題なし。

  //子クラスのオブジェクト作成
  DogC d1 = new DogC(); --- A 上記@参照
  DogC d2 = new DogC(10);
 }
}

≪Java≫ 【前回の続きでメソッドの場合】static変数はサブクラスに引き継がれないんじゃなかったっけ?(メモ)

前回の続きで、今度はメソッドで検証。。。

//スーパークラス
class AnimalM{
 static void disp(String s){
 System.out.println("disp:" + s);
 }
}

//サブクラス
class DogM extends AnimalM{}

//実行クラス
public class ExecM {
 public static void main(String[] args) {
  AnimalM a = new AnimalM();
  DogM d = new DogM();
  a.disp("a"); → 「disp:a」と表示される @
  d.disp("d"); → 「disp:d」と表示される A
  AnimalM.disp("AnimalM"); → 「disp:AnimalM」と表示される
 }
}

あれ?・・・^^;

ちなみに @ と A の部分は、Eclipseでは、
『型AnimalM からの static メソッド disp(String) には static にアクセスする必要があります。』
と黄色ビックリマークで警告表示が出ます。

≪Java≫ static変数はサブクラスに引き継がれないんじゃなかったっけ?(メモ)

前提として、
『継承する場合、静的メンバ(static)はサブクラスに引き継がれない』はずだが。。。
↓ 試してみた結果。

//スーパークラス
class Animal{
 static int n; → 静的メンバなので、サブクラスには継承されない(はず)
}
//サブクラス
class Dog extends Animal{}

//実行クラス
public class Exec {
 public static void main(String[] args) {
  Animal a = new Animal();
  Dog d = new Dog();
  a.n = 10; → コンパイルエラーではない。
  System.out.println(a.n); → 「10」と表示される
  System.out.println(d.n); → 「10」と表示される
  System.out.println(Animal.n); → 「10」と表示される

  d.n = 20;
  System.out.println(a.n); → 「20」と表示される
  System.out.println(d.n); → 「20」と表示される
  System.out.println(Animal.n); → 「20」と表示される


  Animal.n = 30;
  System.out.println(a.n); → 「30」と表示される
  System.out.println(d.n); → 「30」と表示される
  System.out.println(Animal.n); → 「30」と表示される
 }
}

。。。頭の整理が必要みたい。。。

≪Java≫ 抽象クラス・抽象メソッドのルール(注意点)

≪Java≫ 抽象クラスのルール(注意点)


■ 抽象クラス


 (1) abstract を記述する。
  (例)
   public abstract class Test(){ ... }
  → アクセス修飾子は public なしでも問題なし。
  → クラス内に抽象メソッドがなくても問題なし。
    (↑ 味がないかもしれない。普通は抽象メソッドが存在し、サブクラスでオーバーライドされる)

 (2) オブジェクトは作成できない(newは使わない)
  → 実装(new によるオブジェクト作成)は、サブクラスで行う。

 (3) サブクラスで、抽象メソッドを実装する。
  → 基本的には、抽象クラスの抽象メソッドをサブクラスで全て実装(具象メソッドに)する。
  → 一部の抽象メソッドのみ実装した場合(抽象メソッドが残っている場合)は、サブクラスはスーパークラス同様に抽象クラスになる。(さらにサブクラスで具象クラスになる必要がある)

■ 抽象メソッド


 (1) abstract を記述する。
 (2) メソッドとしての処理内容がなく、セミコロン(;)で終了する。
  (例)
   ・ public abstract void show(int n);
   ・ abstract int getInt();
    → アクセス修飾子は public なしでも問題なし。