★★Java質問・相談スレッド157★★at TECH
★★Java質問・相談スレッド157★★ - 暇つぶし2ch228:デフォルトの名無しさん
12/09/23 03:25:12.81
graphicsで自前なんだし難しいてのはfont mericsのことじゃないの?

229:デフォルトの名無しさん
12/09/23 07:08:11.37
>>227
だからそんな話をしてないって

以上

230:デフォルトの名無しさん
12/09/23 11:01:26.11
Javaはマイクロソフトのステマの攻撃ターゲットに設定されました

231:デフォルトの名無しさん
12/09/23 15:38:19.47
>>143

232:デフォルトの名無しさん
12/09/23 17:30:34.41
>>228
あぁ、それ俺もよくわからなかった

233:デフォルトの名無しさん
12/09/24 00:04:34.89
すみません、ネットで調べましたが、ヒント見つからず、
どうしても分かりませんでした。

質問は、以下のソースコードで、
ExClass35Array = subExClass35Arrayで、
subExClass35Arrayの参照情報をExClass35Arrayへ代入しているのですが、
System.out.println(ExClass35Array[0].a)がコンパイルエラーとなり、
期待している結果「4」と表示されません。何がいけないのでしょうか?

class ExClass35{
public static void main(String[]args){
ExClass35[] ExClass35Array;
subExClass35[] subExClass35Array = new subExClass35[5];
for( int i = 0 ; i < subExClass35Array.length ; i++){
subExClass35Array[i] = new subExClass35();
}
subExClass35Array[0].a = 4;
System.out.println(subExClass35Array[0].a);
ExClass35Array = subExClass35Array;
System.out.println(ExClass35Array[0].a);
}
}
class subExClass35 extends ExClass35{
int a ;
}

234:デフォルトの名無しさん
12/09/24 00:07:01.60
int aにpublic ってつければコンパイルは通るけど、
何かもっとちゃんとした資料で勉強した方がいい

235:デフォルトの名無しさん
12/09/24 00:35:50.96
234さん
ご回答有難うございます。

下記の部分では、問題なく「4」と表示されます。
subExClass35Array[0].a = 4;
System.out.println(subExClass35Array[0].a);

参照情報を代入(ExClass35Array = subExClass35Array)しただけなのに、
int a ; に publicをつけなければ、
System.out.println(ExClass35Array[0].a); で「4」と表示されないのでしょうか?

>>int aにpublic ってつければコンパイルは通るけど、
実際につけてみましたが、やはりコンパイルエラーになりました・・・。

すみません、混乱しております。

236:デフォルトの名無しさん
12/09/24 00:45:19.89
234だけど、publicをつければいいというのは今回とは別の話だった

ExClass35[]という型のExClass35Arrayという変数に
subExClass35[]という型のsubExClass35Arrayという変数を
ExClass35Array = subExClass35Array;
で代入しようとしているのがおかしい.
継承された型ならスーパークラスの型の変数に代入できるけど、
配列はできないよ

つかクラス名は大文字で始める、変数は小文字で始めるっていうお約束を
ことごとく守らないからすごく見づらい

237:デフォルトの名無しさん
12/09/24 00:56:40.61
234さん

早速のレス有難うございます。

>ExClass35Array = subExClass35Array;
>で代入しようとしているのがおかしい.

すみません、何をしようとしているのか、背景の説明が足りておりませんでした。

URLリンク(www.javaroad.jp)
⇒こちらのサイトの「【例3】変換元が配列型、変換先が配列型の例です。SuperClassクラスはSubClassクラスのスーパークラスであるとします。 」でソースコードがあります。
ここで配列の型変換が説明されており、それを元に、先ほどお伝えしたソースコードを私が作りました。

本当に代入による型変換が行われているのか?というのを確認するために、
ExClass35Array = subExClass35Arrayということを行い、
System.out.println(subExClass35Array[0].a); で「4」が表示されるか確認したい
というのが目的になります。

>継承された型ならスーパークラスの型の変数に代入できるけど、
>配列はできないよ
すみません、配列の型は代入できないのでしょうか?
サイトの情報が間違っているのでしょうか?

>つかクラス名は大文字で始める、変数は小文字で始めるっていうお約束を
>ことごとく守らないからすごく見づらい
この点は今のうちから守っていきます。すみません。。


238:デフォルトの名無しさん
12/09/24 00:58:52.44
荒らすな

239:デフォルトの名無しさん
12/09/24 01:05:32.79
ごめんなさい、俺があほでした

int aはsubExClass35というExClass35のサブクラスで初めて定義されているメンバなので、
ExClass35にアップキャストした後だと、 ExClass35というクラスにはaというメンバは存在しないから、
ExClass35の変数のaにアクセスしようとしても、そんなメンバは存在しないとエラーが起こる.
これが実際で、他の俺のレスは全部俺の勘違いだった… 配列でも普通にアップキャストできたごめん

240:デフォルトの名無しさん
12/09/24 01:11:23.82
荒らすな

241:デフォルトの名無しさん
12/09/24 01:34:32.38
>>233
まずはエラーメッセージをコピペする方法から学ぶんだ。

242:デフォルトの名無しさん
12/09/24 10:49:28.42
239さん

ご回答有難うございます。
頂いたアドバイスで理解することができました。
サブクラスの配列の変数からスーパークラスの配列の変数へ代入した場合、
スーパークラスが参照できる領域は、サブクラスに継承したメンバ変数・メソッドだけという制約がありました。
よって、
class ExClass35{int a; ・・・・以降省略}
class subExClass35 extends ExClass35{ int aは削除 }
とすることで、
System.out.println(ExClass35Array[0].a);
で、期待した「4」を表示させることができました。

大変助かりました。感謝です^^

241さん

そうですね、最初からエラーメッセージ書くべきでした。
事後ですが、以下のメッセージが出ていました。
=======
Exception in thread "main" java.lang.Error: コンパイル問題が未解決です:
a は解決できないか、フィールドではありません

at クラス.ExClass35.main(ExClass35.java:24)
=======

240さん
荒らしてしまって、すみません。。


243:デフォルトの名無しさん
12/09/24 10:54:41.86
>>238 >>240は常駐してる荒らしだから気にしなくていい

244:デフォルトの名無しさん
12/09/24 11:28:11.74
243さん
了解しました。有難うございます。

245:デフォルトの名無しさん
12/09/24 14:04:11.94
荒らすな

246:デフォルトの名無しさん
12/09/24 14:27:18.48
なおしときますね

247:デフォルトの名無しさん
12/09/24 15:55:46.11
素朴な質問ですが、Javaはなぜ大文字と小文字を混ぜているんでしょうかね
例:System.out.printlnというように
C言語みたいに小文字だけにすればいいようなかんじですが

248:デフォルトの名無しさん
12/09/24 16:06:36.01
なんとか記法

249:デフォルトの名無しさん
12/09/24 16:28:26.74
クラス名か変数/メソッド名か一目で分かるようにするため

250:デフォルトの名無しさん
12/09/24 16:30:48.01
>>249
どうもありがとうございました
クラス名・・・大文字が混ざっている小文字
変数/メソッド・・・小文字だけ
ということでよろしいですかね


251:デフォルトの名無しさん
12/09/24 16:36:33.11
荒らすな

252:デフォルトの名無しさん
12/09/24 16:44:15.65
>>250
クラス/インターフェイス・・・パスカルケース(単語先頭が大文字) 例:PascalCase
変数/メソッド・・・キャメルケース(先頭を除いて単語先頭が大文字) 例:camelCase
定数・・・大文字スネークケース(全て大文字アンダーバー区切り)例:SNAKE_CASE

253:デフォルトの名無しさん
12/09/24 16:53:28.87
X11Util.Display: Shutdown (close open / pending Displays: false, open (no close attempt): 1/1, pending (not closed, marked uncloseable): 1)
X11Util: Open X11 Display Connections: 1
X11Util: Open[0]: NamedX11Display[:0.0, 0x7f1c6410c6b0, refCount 1, unCloseable true]
X11Util: Pending X11 Display Connections: 1
X11Util: Pending[0]: NamedX11Display[:0.0, 0x7f1c5c001ec0, refCount 0, unCloseable true]
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f1cbd295c58, pid=8362, tid=139761430722304
#
# JRE version: 6.0_33-b03
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.8-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libX11.so.6+0x33c58] XQueryExtension+0x28
#
# An error report file with more information is saved as:
# /processing-2.0b3/hs_err_pid8362.log

254:デフォルトの名無しさん
12/09/24 17:15:54.90
なんだか知らんが

Linux板へ行け

255:デフォルトの名無しさん
12/09/24 17:21:47.70
馬鹿には無理

256:デフォルトの名無しさん
12/09/24 19:13:34.49
252さん
書き方の情報有難うございます。
今のうちから、その書き方を心がけておきたいと思います。

257:デフォルトの名無しさん
12/09/24 22:18:29.86
うんこちんちん

258:デフォルトの名無しさん
12/09/24 22:30:50.99
今日、アップキャストとダウンキャストを勉強していました。
ソースを見てもイメージできないと、なかなか理解が厳しいですね。


259:デフォルトの名無しさん
12/09/24 22:36:01.13
>>258
クラス図でイメージしてるかな。

260:デフォルトの名無しさん
12/09/24 23:03:10.31
javaの印刷APIで印刷させようと思っているのですが、wordやexcelで印刷要求した時に使われるトレイ以外から印刷しようとしているらしく
用紙がないとのエラーになってしまいます。

トレイや向きを指定するにはどうすればよろしいでしょうか?

261:デフォルトの名無しさん
12/09/24 23:05:48.99
javaってタブレットの手書きに対応したAPIてありますか?

262:デフォルトの名無しさん
12/09/24 23:15:20.77
タブレットの手書きが出来るjavaアプリって何かありますか?

263:デフォルトの名無しさん
12/09/25 01:31:06.26
こんなところで質問はもうやめるんだ
わかるだろ

264:デフォルトの名無しさん
12/09/25 01:43:05.79
うんち

265:デフォルトの名無しさん
12/09/25 03:08:42.42
jtabletとかjpenとか

266:デフォルトの名無しさん
12/09/25 15:32:36.87
今読んでるソースにクラス内でinterface宣言があるんですが、
これってどういう意味があるんでしょうか。


267:デフォルトの名無しさん
12/09/25 16:00:10.43
interface

268:デフォルトの名無しさん
12/09/25 16:05:19.39
レストン。
たとえばクラス内でインタフェース宣言したら
どこで継承すればいいのかな??さっぱりです


269:デフォルトの名無しさん
12/09/25 16:17:04.06
その定義が見える範囲(スコープ)で継承すればいいんじゃないの
「public class ***」の中で「public static interface ***」と定義されてるなら
どこからでも見えると思っていい
あと、interfaceの場合は継承(extends)でなく実装(implements)と呼ぶ

270:デフォルトの名無しさん
12/09/25 16:26:03.41
インターフェースにも継承あるだろ

271:デフォルトの名無しさん
12/09/25 16:26:34.52
ちゃんと勉強してから答えろな

272:デフォルトの名無しさん
12/09/25 16:28:00.52
アスペ?

273:デフォルトの名無しさん
12/09/25 16:29:54.94
うんち


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch