こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SJC-P の勉強

Javaの開発に携わって1年余りの初心者ですが、
SJC-Pの取得を目指して勉強中です。

2つばかりお聞きしたいのですが、
 ○インナークラスの使い所。
 ○サブクラスのオブジェクトを
  スーパクラスのオブジェクトで宣言する、
  事の意味

について、具体的な例などお教え下さい。
宜しくお願い致します。

投稿日時 - 2006-01-05 23:37:20

QNo.1877859

暇なときに回答ください

質問者が選んだベストアンサー

○サブクラスのオブジェクトを、スーパクラスのオブジェクトで宣言したものに代入して使うことの意味
サブクラスを統一的に扱える
ありがちな、しょーもないサンプル
----------------------------------------------------------------
abstract class Animal {
abstract void voice();
}

class Lion extends Animal {
public void voice(){
System.out.println("がぉ~");
}
}

class Horse extends Animal {
public void voice(){
System.out.println("ひひ~ん");
}
}

class Elephant extends Animal {
public void voice(){
System.out.println("ぱぉ~ん");
}
}

class Sample {
public static void main(String args[]){
Animal an[];
an = new Animal[3];

an[0] = new Lion();
an[1] = new Horse();
an[2] = new Elephant();
for(int i=0; i< an.length;i++){
System.out.println(an[i].getClass());
an[i].voice();
}
}
}

投稿日時 - 2006-01-06 02:11:46

お礼

遅くなりましてすみません。
判りやすい例を挙げていただき、
よくわかりました。
有難うございます。

投稿日時 - 2006-01-08 21:15:05

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>○インナークラスの使い所。

BLUEPIXYさんのNo1の例は非常に参考になるいい例だと思います。しかし実際には純粋なJavaプログラマーはインナークラス系を使う事は非常に少ないです。

多言語から流れてきたプログラマーに1枚のファイルに複数のクラスを作るという人が多いように感じます。

インナークラスを嫌う開発者が開発ポリシーとしてインナークラスを使ってはならないと明示するプロジェクトもあります。

そういう意味では使いどころはあるのですが、実際にはまず使わないという認識を持っていてもいいと思います。

投稿日時 - 2006-01-07 00:56:33

お礼

遅くなりましてすみません。
有難うございます。
余り使わないのですね。
インナークラスもしっかり覚え、
現場で見た時に、慌てないようにしたいと考えています。

投稿日時 - 2006-01-08 21:24:54

ANo.3

直接の回答ではありませんが。
SJC-Pには「使い所」や「意味」を知らなくても、文法をしっかり押さえておけば合格できますよ。逆に、初心者レベルでは使わないような文法や複数言語使い分けていると混乱しがちな文法など細かいところもしっかり押さえておきましょう。

投稿日時 - 2006-01-06 15:30:59

お礼

遅くなりましてすみません。
ご回答有難うございます。
よく解るのですが、
勉強の中で疑問に思った事と、
試験中迷った時に意味を知っていた方が良いと思い、
質問させてもらいました。

投稿日時 - 2006-01-08 21:19:19

ANo.1

○インナークラスの使い所。
そのクラスでしか使わないようなクラス
良い例かどうかは、わからんけど、以前に作ったプログラム。
普通に文字をソートしたら、大文字が先に来るが、小文字が先に来るようにソートするためにコンパレータを作成している。
このような、ココだけでしか使わないクラスのインスタンスが必要になるために無名クラスで作成している。
ちなみに、インナークラスにしても、同じ。
また、MyCharSort クラス自体にコンパレータインターフェースをインプリメントしてインスタンスを作成してもOK。
----------------------------------------------------------------
//compareを無名クラスで使う
import java.util.Arrays;
import java.util.Comparator;
//import java.lang.Character;

//[A-Z]は[a-z]より大きい
class MyCharSort {

public static void main(String args[]){
char inpData[] = {'A','b','z','Q',' ','R','Z','H','A'};
Character data[] = new Character[inpData.length];
for(int i=0;i<inpData.length;i++){
data[i]=new Character(inpData[i]);
}
Comparator<Character> cmp= new Comparator<Character>(){
public int compare (Character ch1, Character ch2) {
char c1=ch1.charValue(), c2=ch2.charValue();
if(Character.isUpperCase(c1) && Character.isLowerCase(c2))
return ( 1);
if(Character.isLowerCase(c1) && Character.isUpperCase(c2))
return (-1);
return (ch1.compareTo(ch2));
}
};

Arrays.sort(data, cmp);
for(Character c : data){
System.out.println(c.charValue());
}
}
}

投稿日時 - 2006-01-06 01:47:51

あなたにオススメの質問