ウォッチ漫画『酒男子』新連載開始!

お疲れ様です。
Junitテストでvoid戻り値メッソドをテストする方法について質問が
あります。
戻り値なしのvoidメソッドをassertで検査したい場合どうしたら
いいでしょうか。
ただexceptionとかが無く動いたら良いだけです。

お答えお願いします。

A 回答 (1件)

failを使ってはどうでしょう?



public void test1() {
try {
testingMethod(); // テスト対象
} catch(Exception e) {
fail(e.getMessage());
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q抽象クラスをJUNITでテストする方法

抽象クラス内に実装メソッドと抽象メソッドがある場合に、
そのクラスをJUNITでテストしたいと思っています。
通常のクラスであれば、そのクラスに対するテストクラスを
作成して、テストクラス内でテスト対象クラスをnewして
テストケースを記述していくと思いますが、
上記のような抽象クラスの場合は、
どういった形でテストクラスを作成すれば良いのでしょうか?
抽象クラスはnewできないので、
抽象クラスを実装したクラスをまず作成して
そのクラスに対するテストクラスを作成するのでしょうか?
お薦めの方法や一般的な方法があれば教えてください。

以上、よろしくお願い致しますm(__)m

【環境】
JDK1.4.2
JUNIT3.8.1

Aベストアンサー

こんにちは。
一般的な方法かどうかは分かりませんが、私が実際にプロジェクトで実施した方法は、
・テスト用に抽象クラスを継承したクラスを作成
・そのクラスに対するテストクラスを作成
でした。

抽象クラスの実装メソッドは、抽象クラスのテストとした方がいいと思います。
実装クラスで行おうとすると、複数の実装クラスがあるときにどの実装クラスでテストをするべきかコントロールする必要があります。
その結果、テストが漏れていた、といった苦い経験があったためです。

あとは命名ルールを決めておけばよいと思います。

 テスト対象クラス=AbstractSample

だったら、

 テスト用の実装クラス=ConcreteSample
 テストクラス=AbstractSampleTest

というような感じですね。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qflush()とclose()について

Javaを独習Javaで独習しています。現在、入出力の所まできたのですが、Writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習Javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。

Aベストアンサー

フラッシュすれば、ファイルやその他物理デバイスに強制的にバッファの内容が出力されるということは、理解されていると考えてよいですね?

で、なかなかストリームをクローズできない(またはしない)場合には、いつまで経ってもバッファの内容が物理デバイスに出力されないかも知れませんよね?でも、適当なタイミングで定期的にフラッシュすれば、その時点でバッファに溜まっている内容が物理デバイスに出力されます。

そのサンプルの場合は、書き出してすぐ?クローズしちゃうため、明示的なフラッシュは必要なかったんだと思いますが、

・フラッシュは、(ストリームを閉じずに)バッファの内容を強制的に物理デバイスに出力する。
・クローズは、(フラッシュされていなければフラッシュしてから)そのストリームを閉じる。

とまぁ、目的も内容も全然違うわけです。

QdjUnit コンストラクタがprivateでテストが行えない

djUnit コンストラクタがprivateでテストが行えない

djUnitを使っております。

テスト対象のメソッドにアクセスしてテストを行いたいのですが、
どうもそれができません。
理由としては、コンストラクタがprivateになっているから?です。
(「コンストラクター TestManager() は不可視です」というエラーが出ます。)

コンストラクタのprivateを消せば、テスト対象のメソッドにアクセスできるのですが、
実際には消してテストをしてはだめということになっています。

コンストラクタがprivateでもdjUnitでテストが行える方法がございましたら、
書き方をご教授いただけないでしょうか?
どうかよろしくお願いいたします。


一応下記が詳細です。
(クラス名、コンストラクタ名、メソッド名)
------------------------
[クラス]
public final class TestManager
[コンストラクタ]
private TestManager() {
}
[テスト対象のメソッド]
public Structure testCreate(byte[], byte[], byte[])
-----------------------

色々試したのですが、途中で終了してしまって
目的のテスト対象のメソッドを実行するところまで辿りつけません・・・。
[お試しパターン1]
Class c = TestManager.class;
Constructor[] con = c.getDeclaredConstructors();
TestManager conIns = (TestManager)con[0].newInstance(); //ここで処理が終了してしまう
[お試しパターン2]
Class testClass = Class.forName("TestManager"); //ここで処理が終了してしまう
Constructor[] TestManager = testClass.getDeclaredConstructors();
TestManager[0].setAccessible(true);
Object conIns = TestManager[0].newInstance((Object[])null);
TestManager test = (TestManager)conIns;

djUnit コンストラクタがprivateでテストが行えない

djUnitを使っております。

テスト対象のメソッドにアクセスしてテストを行いたいのですが、
どうもそれができません。
理由としては、コンストラクタがprivateになっているから?です。
(「コンストラクター TestManager() は不可視です」というエラーが出ます。)

コンストラクタのprivateを消せば、テスト対象のメソッドにアクセスできるのですが、
実際には消してテストをしてはだめということになっています。

コンストラクタがprivateでもdjUnitでテ...続きを読む

Aベストアンサー

こんにちは。

済みません・・・、さっぱり意味がわかりません。
>testCreate(fileA, fileB, fileC);
どこから呼べるの???
TestManagerクラスからは呼べるだろうけど、外部からは呼べない。
TestManagerが内部的に使うだけの目的で作ったpublic関数なら、単独ではテストの仕様がない。
それだったら
public Structure testCreate(byte[], byte[], byte[])
がそもそもおかしいという話になるが・・・。

例えば
public TestManager getInstance(){return new TestManager();}
とか無いの?

Q文字列を日付に変換でParseException

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(8,10);
sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生
}

どこが悪いのか解りません。
よろしくご教授ください。

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(...続きを読む

Aベストアンサー

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろん後続のルーチンでnullチェックは要るようになる。
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
// ↓これもしない。
// lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
//                              lstdaysgn.substring(8,10);
sgndate = new SimpleDateFormat("yyyyMMdd").parse(lstdaysgn); // スラッシュつけずに8桁のyyyyMMddでそのままDateにする。
}

以上の手直しにより、このルーチンを通る際にDate 1つとString 7つ、インスタンスの生成を回避する事ができる。これがループで処理されるならなおさら。
仮に、「new SimpleDateFormat("yyyyMMdd")だとパースのたびにSimpleDateFormatのインスタンスが作られちゃうジャン!」と思うならルーチン化していいと思うけど、その場合はスレッドセーフなルーチンにしないといけないのでそこらへん注意の事。

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろ...続きを読む

QJava リフレクションについて

1.リフレクションを使い、値をセット(BeanのSetterメソッドにて)
2.1でセットした値を取得するために、下記コードで取得
Method Method = Class.getMethod("getLstData");
Object obj = Method.invoke(****);

上記の****の箇所には、メソッドのあるクラスのインスタンスを渡す、
というところまでは分かりますが、newInstance()してしまうと、新しいオブジェクトになってしまうので
値が取得できません。
error>>java.lang.IllegalArgumentException: object is not an instance of declaring class

どのようにすれば、値の取得が可能でしょうか。
どなたかご教授いただければと思います。

※Java 1.5を使用

Aベストアンサー

リフレクションを使う必要のないプログラムだったらどうやるか考えてみてください。

x.setLstData(...);
他の処理
obj = x.getLstData(...);

setLstData()を呼んでからgetLstData()を呼ぶまでの間にx=new XXX();を実行することはありませんよね?
それと同じです。
getLstData()を呼ぶまで、値がセットされたオブジェクトへの参照をどこかに残しておけばいいのです。

> java.lang.IllegalArgumentException: object is not an instance of declaring class

このエラーはMethod.invoke()で出ているものでしょうか?
もしそうなら、メッセージのとおりinvoke()に渡しているレシーバオブジェクトのクラスが合っていないだけだと思われます。
つまり、クラスAのメソッドをinvoke()するのに、クラスBのオブジェクトをレシーバに指定している && クラスBはクラスAと継承関係がない、とか。

リフレクションを使う必要のないプログラムだったらどうやるか考えてみてください。

x.setLstData(...);
他の処理
obj = x.getLstData(...);

setLstData()を呼んでからgetLstData()を呼ぶまでの間にx=new XXX();を実行することはありませんよね?
それと同じです。
getLstData()を呼ぶまで、値がセットされたオブジェクトへの参照をどこかに残しておけばいいのです。

> java.lang.IllegalArgumentException: object is not an instance of declaring class

このエラーはMethod.invoke()で出ている...続きを読む

QEclipseで、プロジェクト名のところに赤いバッテンのエラーマークが

Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークがついていますが、どのソースファイルにも赤いエラーマークは無く、なぜエラーになっているのか分かりません。

どこでエラーが出ているのか調べる方法はあるでしょうか?

Aベストアンサー

ウインドウ → ビューの表示 → 問題
をクリックすれば問題のある箇所が表示されるはずです

Qjava spring でエラーが出て困ってます

spring 超初心者です。cloudfoundyでcronを実行しようとしています。

CronService から@Autowiredで、StartJob_cを呼び出し
更に呼び出されたStartJob_cから、@AutowiredでReadFile_cを呼び出そうとしています。

しかし、Injection of autowired dependencies failed; nested exception
というエラーが出て動きません。

質問1)このような、呼び出しはできないのでしょうか?
質問2)springでこのような、呼び出しをしたい場合、どうするのが良いのでしょうか?




エラー内容は、
[ERROR] [main 11:08:03] (ContextLoader.java:initWebApplicationContext:220) Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cronService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.krams.tutorial.job.StartJob org.krams.tutorial.job.CronService.startJob; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'syncStartJob': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.krams.tutorial.job.ReadFile org.krams.tutorial.job.StartJob_c.readFile_cService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.krams.tutorial.job.ReadFile] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

です。


ロジックサンプルは、以下の通りです。

@Service
public class CronService implements Cron{

protected static Logger logger = Logger.getLogger("service");

@Autowired
@Qualifier("syncStartJob")
private StartJob startJob;

@Scheduled(cron="*/10 * * * * ?")
public void doSchedule() {
logger.debug("cron");
startJob.jobExec();

}
}




@Component("syncStartJob")
public class StartJob_c implements StartJob{
protected static Logger logger = Logger.getLogger("service");

//@Autowired
//private StartJob2 startJob2_cService;

@Autowired
private ReadFile readFile_cService;
@Autowired
private DeleteFile deleteFile_cService;
@Autowired
private ShinchokuFile1LineDel shinchokuFile1LineDel_cService;

public void jobExec() {
// TODO Auto-generated method stub
logger.debug("StartJob");

List<String> strYMDStartArray = new ArrayList();
strYMDStartArray.add("20060701");//0 1
strYMDStartArray.add("20060501");//1 2
strYMDStartArray.add("20060301");//2 3
strYMDStartArray.add("20060101");//3 4
strYMDStartArray.add("20051101");//4 5
strYMDStartArray.add("20050901");//5 6

String strFileName = "";


List<Integer> AYMDCNTData = new ArrayList();
strFileName = "YMDCNT";
AYMDCNTData = this.readFile_cService.readIntData(strFileName);
int intYMDCNT = AYMDCNTData.size();



List<Integer> ACNTData = new ArrayList();
strFileName = "JobCNT";
ACNTData = this.readFile_cService.readIntData(strFileName);
int intJobCNT = ACNTData.size();




String strYMDStart = "";
String strYMDEnd = "";
int intYMDID = 0;
int intJobCounter = 11;
intJobCounter = intJobCounter + intJobCNT;

String sTrailJoken_start = "";
String sTrailJoken_end = "";
String sTrailGaku_start = "";
String sTrailGaku_end = "";

if( intJobCounter == 11){
sTrailJoken_start = "10";
sTrailJoken_end = "10";
sTrailGaku_start = "5000";
sTrailGaku_end = "5000";
}else if(intJobCounter == 12){
sTrailJoken_start = "10";
sTrailJoken_end = "10";
sTrailGaku_start = "10000";
sTrailGaku_end = "10000";
}else if(intJobCounter == 13){
sTrailJoken_start = "10";
sTrailJoken_end = "10";
sTrailGaku_start = "15000";
sTrailGaku_end = "15000";
}else if(intJobCounter == 14){
sTrailJoken_start = "10";
sTrailJoken_end = "10";
sTrailGaku_start = "20000";
sTrailGaku_end = "20000";
}

spring 超初心者です。cloudfoundyでcronを実行しようとしています。

CronService から@Autowiredで、StartJob_cを呼び出し
更に呼び出されたStartJob_cから、@AutowiredでReadFile_cを呼び出そうとしています。

しかし、Injection of autowired dependencies failed; nested exception
というエラーが出て動きません。

質問1)このような、呼び出しはできないのでしょうか?
質問2)springでこのような、呼び出しをしたい場合、どうするのが良いのでしょうか?




エラー内容は、
[ERROR] [main 11:08:03] ...続きを読む

Aベストアンサー

例外のログはこれだけじゃないですよね?

Q総称型ArrayList<E>への参照はパラメ-タ

Java初心者です宜しくお願いします。

0から8までの数字をランダムに並べ替えるサブ関数を作成しました。
Eclipse上で単独のプログラムとして動かした場合には、エラーは出ませんが、他のプログラムの
サブ関数として動かそうとすると、

「ArrayListはraw型です。
総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。
Listはraw型です。総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。」と
いうエラーが出ます。

どのように修正してやればいいのでしょうか。

================================================================================

public void ShuffleTest()
{
List c = new ArrayList() ;
for ( int i = 0 ; i < 9 ; ++ i )
{
c.add( new Integer( i ) ) ;
}
Collections.shuffle(c); // [?�?�?�?�]

int j = -1 ;
for ( int i = 0 ; i < 9 ; ++ i )
{
//toString(c.get( i )) ;
System.out.print( c.get( i ) + " " ) ;
int k = j + 1 ;
s_Oder[ k ] = i ;
System.out.print( "s_Oder["+ k + "] =" + i ) ;
}
}

Java初心者です宜しくお願いします。

0から8までの数字をランダムに並べ替えるサブ関数を作成しました。
Eclipse上で単独のプログラムとして動かした場合には、エラーは出ませんが、他のプログラムの
サブ関数として動かそうとすると、

「ArrayListはraw型です。
総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。
Listはraw型です。総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。」と
いうエラーが出ます。

どのように修正してやればいいのでしょうか。

...続きを読む

Aベストアンサー

JDK1.5以降ではジェネリック型には型指定が必須です。
したがって、
List<Integer> c = new ArrayList<Integer>();
と特定化しなければなりません。

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング