Java基础——关于接口和抽象类的几道练习题
呃,一定要理解之后自己敲!!!这几道题,使我进一步了解了接口和抽象类。
1.设计一个商品类 字段:
商品名称,重量,价格,配件数量,配件制造厂商(是数组,因为可能有多个制造厂商)
要求: 有构造函数
重写 toString 方法
重写 equals方法,进行两件商品的比较
1 package TT; 2 3 import java.util.Arrays; 4 5 public class G { 6 private int 重量; 7 private String 商品名称; 8 private int 价格; 9 private int 配件数量; 10 private String[] 配件制造厂商列表; 11 12 public G(int 重量, String 商品名称, int 价格, int 配件数量, String[] 配件制造厂商列表) { 13 super(); 14 this.重量 = 重量; 15 this.商品名称 = 商品名称; 16 this.价格 = 价格; 17 this.配件数量 = 配件数量; 18 this.配件制造厂商列表 = 配件制造厂商列表; 19 } 20 21 @Override 22 public String toString() { 23 return "G [重量=" + 重量 + ", 商品名称=" + 商品名称 + ", 价格=" + 价格 + ", 配件数量=" 24 + 配件数量 + ", 配件制造厂商列表=" + Arrays.toString(配件制造厂商列表) + "]"; 25 } 26 27 public boolean equals(Object obj) { 28 if (this == obj) { 29 return true; 30 } 31 32 if (obj instanceof G) { 33 G goods = (G) obj; 34 35 if (this.重量 == goods.重量 && this.价格 == goods.价格 36 && this.商品名称.equals(goods.商品名称) && this.配件数量 == goods.配件数量) { 37 for (int i = 0; i < this.配件制造厂商列表.length; i++) { 38 if (this.配件制造厂商列表[i] != goods.配件制造厂商列表[i]) { 39 return false; 40 } 41 } 42 return true; 43 } else { 44 return false; 45 } 46 } else { 47 return false; 48 } 49 } 50 //将测试类和上面的放一块儿了 51 public static void main(String[] args) { 52 53 String[] 厂商列表1 = { "微软", "索尼", "三星" }; 54 String[] 厂商列表2 = { "微软", "索尼", "三星" }; 55 G g1 = new G(40, "电脑", 4000, 30, 厂商列表1); 56 G g2 = new G(40, "显示器", 4000, 30, 厂商列表2); 57 58 System.out.println(g1); 59 System.out.println(g2); 60 61 System.out.println(g1.equals(g2)); 62 } 63 }
2.设计一个抽象类,并演示它的使用 (三级)
1 package TT; 2 3 //抽象类 4 abstract class 数学老师标准{ 5 abstract void 讲数学(); 6 abstract int add(int a,int b); 7 } 8 9 //第二级抽象类 10 abstract class 普通数学老师标准 extends 数学老师标准{ 11 void 讲数学(){ 12 System.out.println("我能讲数学"); 13 } 14 } 15 16 //第三级抽象类 17 class 真正的数学老师 extends 普通数学老师标准{ //注意这里能不能用abstract修饰,修饰了以后会对上下的影响 18 //可以重写,也可以不重写 19 void 讲数学(){ 20 System.out.println("我能讲高数"); 21 } 22 int add(int a,int b){ 23 return a+b; 24 } 25 } 26 class Test{ 27 public static void main(String[] args) { 28 数学老师标准 t1=new 真正的数学老师(); 29 int result=t1.add(44, 4444); 30 System.out.println("计算结果是:"+result); 31 t1.讲数学(); 32 } 33 }
3.设计一个接口, 并设计一个实现类,实现这个接口
1 package TT; 2 3 interface 银行标准{ 4 int MONEY=9900000; 5 void 取钱(); 6 void 存钱(); 7 } 8 9 class 工商银行 implements 银行标准{ 10 public void 取钱(){ 11 System.out.println("钱进银行了"); 12 } 13 14 @Override//全部方法都拿来 15 public void 存钱() { 16 System.out.println("钱出去了"); 17 } 18 } 19 public class Test { 20 public static void main(String[]args){ 21 银行标准 bank=new 工商银行(); 22 bank.取钱(); 23 bank.存钱(); 24 25 System.out.println("银行的老底是"+银行标准.MONEY);//此处银行标准用bank会报错,The static field 银行标准.MONEY should be accessed in a static way 26 27 } 28 29 }
4.设计一个类,可以同时实现多个接口
1 package TT; 2 3 interface 建筑标准 { 4 void kaimen(); 5 6 void guanmen(); 7 } 8 9 interface 银行标准 { 10 int MONEY = 9999; 11 12 void 取钱(); 13 14 void 存钱(); 15 } 16 17 class 工商银行 implements 银行标准,建筑标准 { 18 19 @Override 20 public void kaimen() { 21 System.out.println("我能开门"); 22 23 } 24 25 @Override 26 public void guanmen() { 27 // TODO Auto-generated method stub 28 System.out.println("我能关门"); 29 30 } 31 32 @Override 33 public void 取钱() { 34 // TODO Auto-generated method stub 35 System.out.println("我能取钱"); 36 } 37 38 @Override 39 public void 存钱() { 40 // TODO Auto-generated method stub 41 System.out.println("我能存钱"); 42 43 } 44 45 } 46 47 public class Test2 { 48 public static void main(String[] args) { 49 工商银行 bank = new 工商银行(); 50 bank.取钱(); 51 bank.存钱(); 52 System.out.println("銀行的底是" + 工商银行.MONEY); 53 54 bank.kaimen(); 55 bank.guanmen(); 56 } 57 }
5.设计一个类,在继承一个类的同时,实现其的两个接口(具体是什么接口自行设计)
1 package TT; 2 interface 建筑标准{ 3 void kaimen(); 4 void guamen(); 5 } 6 interface 银行标准 7 { 8 int MONEY=900000; //接口中的变量,全相当于public static final 类型的 9 void 取钱(); 10 void 存钱(); 11 } 12 13 14 class 金融机构{ 15 void 货币流通(){ 16 System.out.println("货币流通"); 17 } 18 } 19 class 工商银行 extends 金融机构 implements 银行标准, 建筑标准 { 20 21 public void 取钱() { 22 System.out.println("钱进了银行"); 23 } 24 25 26 public void 存钱() { 27 System.out.println("钱从银行进行个人手里"); 28 } 29 30 31 @Override 32 public void kaimen() { 33 System.out.println("银行有个大门,能打开"); 34 35 } 36 37 38 @Override 39 public void guamen() { 40 System.out.println("银行有个铁门,关了以后谁都进不来了"); 41 42 } 43 44 } 45 46 class Test4{ 47 public static void main(String[] args) { 48 工商银行 bank=new 工商银行(); 49 bank.取钱() ; 50 bank.存钱() ; 51 System.out.println("银行的底是"+bank.MONEY); 52 53 bank.kaimen(); 54 bank.guamen(); 55 56 bank.货币流通(); 57 58 } 59 }
最后的彩蛋彩蛋彩蛋!!!!
由于我在练习的时候将这几个例题放在了同一个TT包下,一共有5个文件。最后的最后,上面的后三个例子开始报错(比如报错:The type 银行标准 is already defined)。
啊啊啊啊,调试半个小时,都没弄好。后来静一下想,既然Eclipse提示XXX已经定义了,是不是只要在同一个包下,无论你建立多少个类,里面都不能重复定义相同类名文件呢?之后就开始Delete两个),果然,成功啦。仔细一想,既然同一个包下,公共类之间可以访问,这种排同性就是验证啊,也可以省下很多资源。