まあ、それを理解して自分で入力する必要があります。 ! !これらの質問は、インターフェイスと抽象クラスについてさらに学ぶのに役立ちました。
1. 製品フィールドを設計します:
製品名、重量、価格、付属品の数量、付属品メーカー (複数のメーカーがある可能性があるため配列です)
要件: コンストラクターがあります
toString をオーバーライドしますメソッド
2つの項目を比較するようにequalsメソッドを書き換えます
package TT; import java.util.Arrays; public class G { private int 重量; private String 商品名称; private int 价格; private int 配件数量; private String[] 配件制造厂商列表; public G(int 重量, String 商品名称, int 价格, int 配件数量, String[] 配件制造厂商列表) { super(); this.重量 = 重量; this.商品名称 = 商品名称; this.价格 = 价格; this.配件数量 = 配件数量; this.配件制造厂商列表 = 配件制造厂商列表; } @Override public String toString() { return "G [重量=" + 重量 + ", 商品名称=" + 商品名称 + ", 价格=" + 价格 + ", 配件数量=" + 配件数量 + ", 配件制造厂商列表=" + Arrays.toString(配件制造厂商列表) + "]"; } public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof G) { G goods = (G) obj; if (this.重量 == goods.重量 && this.价格 == goods.价格 && this.商品名称.equals(goods.商品名称) && this.配件数量 == goods.配件数量) { for (int i = 0; i < this.配件制造厂商列表.length; i++) { if (this.配件制造厂商列表[i] != goods.配件制造厂商列表[i]) { return false; } } return true; } else { return false; } } else { return false; } } //将测试类和上面的放一块儿了 public static void main(String[] args) { String[] 厂商列表1 = { "微软", "索尼", "三星" }; String[] 厂商列表2 = { "微软", "索尼", "三星" }; G g1 = new G(40, "电脑", 4000, 30, 厂商列表1); G g2 = new G(40, "显示器", 4000, 30, 厂商列表2); System.out.println(g1); System.out.println(g2); System.out.println(g1.equals(g2)); } }
2. 抽象クラスを設計し、その使用法を実証します(レベル3)
package TT; //抽象类 abstract class 数学老师标准{ abstract void 讲数学(); abstract int add(int a,int b); } //第二级抽象类 abstract class 普通数学老师标准 extends 数学老师标准{ void 讲数学(){ System.out.println("我能讲数学"); } } //第三级抽象类 class 真正的数学老师 extends 普通数学老师标准{ //注意这里能不能用abstract修饰,修饰了以后会对上下的影响 //可以重写,也可以不重写 void 讲数学(){ System.out.println("我能讲高数"); } int add(int a,int b){ return a+b; } } class Test{ public static void main(String[] args) { 数学老师标准 t1=new 真正的数学老师(); int result=t1.add(44, 4444); System.out.println("计算结果是:"+result); t1.讲数学(); } }
3. インターフェースを設計し、実装クラスを設計し、このインターフェースを実装します
package TT; interface 银行标准{ int MONEY=9900000; void 取钱(); void 存钱(); } class 工商银行 implements 银行标准{ public void 取钱(){ System.out.println("钱进银行了"); } @Override//全部方法都拿来 public void 存钱() { System.out.println("钱出去了"); } } public class Test { public static void main(String[]args){ 银行标准 bank=new 工商银行(); bank.取钱(); bank.存钱(); System.out.println("银行的老底是"+银行标准.MONEY);//此处银行标准用bank会报错,The static field 银行标准.MONEY should be accessed in a static way } }
5. クラスを設計し、クラスを継承しながら、その 2 つのインターフェイス (具体的にはどのインターフェイスを自分で設計するか) を実装します
package TT; interface 建筑标准 { void kaimen(); void guanmen(); } interface 银行标准 { int MONEY = 9999; void 取钱(); void 存钱(); } class 工商银行 implements 银行标准,建筑标准 { @Override public void kaimen() { System.out.println("我能开门"); } @Override public void guanmen() { // TODO Auto-generated method stub System.out.println("我能关门"); } @Override public void 取钱() { // TODO Auto-generated method stub System.out.println("我能取钱"); } @Override public void 存钱() { // TODO Auto-generated method stub System.out.println("我能存钱"); } } public class Test2 { public static void main(String[] args) { 工商银行 bank = new 工商银行(); bank.取钱(); bank.存钱(); System.out.println("銀行的底是" + 工商银行.MONEY); bank.kaimen(); bank.guanmen(); } }
最後のイースターエッグ イースターエッグ! ! ! !
これらのサンプルは練習中に同じ TT パッケージの下に置いたので、合計 5 つのファイルがあります。最後に、上記の最後の 3 つの例ではエラーが報告され始めました (たとえば、エラー: タイプ バンク標準はすでに定義されています)。
ああああああ、30 分デバッグしていますが、まだ正しくできていません。後で落ち着いて考えたのですが、EclipseではXXXが定義されていますと表示されるので、同じパッケージ内にある限り、いくらクラスを作成しても、同じクラス名のファイルは重複して定義できないということなのでしょうか?次に 2 つ) を削除し始めましたが、案の定、成功しました。よく考えてみると、同じパッケージ内のパブリッククラスにアクセスできるため、この排他性が検証され、多くのリソースを節約することもできます。
以上がJava の基本的なインターフェイスと抽象クラスの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。