質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

5391閲覧

Javaの抽象クラスに抽象フィールドを持たせる方法

Nayuta_Ito

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/02/24 01:23

私は数学関係のプログラムを作っていて、その中で体を表現するための抽象クラスを作ったのですが、0と1の存在をどのように表せばよいかわかりません。
具体的には、下のコードのzero()の部分でクラスTにおける零元を取得するようにしたいです。
取得する手段はメソッドでなくてもよいのですが、この場合どうすればよいか教えてください。

Java

1//体のクラス 2abstract class Field <T extends Field<T>>{ 3 public abstract String toString(); 4 public abstract T clone(); 5 abstract T add(T other); 6 abstract T sub(T other); 7 abstract T mul(T other); 8 abstract T div(T other); 9 abstract T zero(); //ここをフィールドにしたい 10 abstract T one(); //ここをフィールドにしたい 11 abstract T neg(); //その体における加法の逆元 12 abstract T inv(); //その体における乗法の逆元 13 abstract boolean equals(T other); 14} 15//別のクラス 16class Foo <T extends <Field<T>>{ 17 int bar(){ 18 return zero().toString().length(); 19 } 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Fieldを継承したクラスを作ってそこに0やら1やらのフィールドを持たせて、
zero()やone()で返すようにすればいいのでは?

java

1class Hoge extends Field<Hoge> { 2 static final Hoge zero = new Hoge(); 3 static final Hoge one = new Hoge(); 4 Hoge(){} 5 Hoge zero() {return zero;} 6 Hoge one() {return one;} 7 8 // 以下省略 9}

コメント

この場合、Fooクラスの記述はどうすればよいですか?

1.コンストラクタでFieldを取り、そのオブジェクトのzero()などを呼び出す

java

1class Foo <T extends <Field<T>>{ 2 3 T field; 4 5 Foo(T field) { 6 this.field = field; 7 } 8 9 int bar(){ 10 return field.zero().toString().length(); 11 } 12}

2.staticメソッドにして、引数でFieldオブジェクトを取るする

java

1class Foo{ 2 static <T extends Field<T>> int bar(T field){ 3 return field.zero().toString().length(); 4 } 5}

投稿2018/02/24 03:09

編集2018/02/24 14:42
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nayuta_Ito

2018/02/24 03:32

この場合、Fooクラスの記述はどうすればよいですか?
guest

0

Filld<Interge> で zero(), one() を定義してみた例です。

java

1//体のクラス 2abstract class Field<T>{ 3 // public abstract String toString(); 4 // public abstract T clone(); 5 // abstract T add(T other); 6 // abstract T sub(T other); 7 // abstract T mul(T other); 8 // abstract T div(T other); 9 abstract T zero(); 10 abstract T one(); 11 // abstract T neg(); //その体における加法の逆元 12 // abstract T inv(); //その体における乗法の逆元 13 // abstract boolean equals(T other); 14} 15 16//別のクラス 17class FieldInt extends Field<Integer> { 18 private Integer _val; 19 public static Integer ZERO = 0; 20 public static Integer ONE = 1; 21 22 public FieldInt() { 23 _val = 0; 24 } 25 public FieldInt(Integer val) { 26 _val = val; 27 } 28 Integer zero() { return ONE; } 29 Integer one() { return ZERO; } 30 public String toString() { return _val.toString(); } 31 32 public static void main(String args[]) { 33 System.out.println("zero:" + (new FieldInt()).zero()); 34 System.out.println("one:" + (new FieldInt()).one()); 35 } 36}

数学の体などをプログラミングで処理することについての参考情報

  • Swiftで代数学入門 〜 2. 群・環・体の定義

https://qiita.com/taketo1024/items/733e0ecf12da359db729

  • 数学プログラムを Haskell で書くべき 6 の理由

https://www.slideshare.net/konn/haskell-6-32258528

投稿2018/02/25 02:42

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問