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两个),果然,成功啦。仔细一想,既然同一个包下,公共类之间可以访问,这种排同性就是验证啊,也可以省下很多资源。

时间: 2024-12-10 22:50:21

Java基础——关于接口和抽象类的几道练习题的相关文章

Java基础(8) - 接口、抽象类

存在的意义接口 - 接口对维护和解耦代码有很很好的帮助 同时由于接口常用来约束对象的行为,可实现"多继承".抽象类 - 抽象类对于代码的维护和重用有很好的帮助. 参考:接口 - https://blog.csdn.net/googleoyyp/article/details/78912259抽象类 - https://blog.csdn.net/chenchaozzu/article/details/82785068 接口和抽象类的区别1.抽象类只能继承且只能继承一个,接口只能实现,但

【java基础】接口VS抽象类

1.至少有一个被abstract修饰的方法,同时修饰类名的类为抽象类,抽象的方法必须被子类覆盖,抽象的类必须被继承,抽象的类可以包含非抽象方法,只能单继承. 2.接口中所有的变量是static final,必须立即初始化,接口中不能包含静态方法,所有的方法都不能有方法体,都默认是public,可以实现多个接口. 3.接口更像是一种需求描述,这一组需求之间可以没什么关联.抽象类是一种功能不全的类,可以定义一部分的功能.

Java基础10 接口的继承与抽象类(转载)

接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: interface Cup{    void addWater(int w);    void drinkWater(int w);} 我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup 接口如下: interface MetricCup extends Cup{    int WaterContent

JAVA基础(1)抽象类和接口

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

Java基础十--接口

Java基础十--接口 一.接口的定义和实例 1 /* 2 abstract class AbsDemo 3 { 4 abstract void show1(); 5 abstract void show2(); 6 } 7 8 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 9 另一种形式定义和表示,就是 接口 interface. 10 */ 11 12 //定义接口使用的关键字不是class,是interface. 13 //interface编译后还是.class文件,其实本质

JAVA中的接口和抽象类(转)

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述“水果”,它就是一个抽象,它有质量.体积等一些共性(水果有质量),但又缺乏特性(苹果.橘子都是水果,它们有自己的特性),我们 拿不

黑马程序员——Java基础——面向对象——继承、抽象类、接口、多态、包、内部类、异常等

第一讲 继承 1.继承: 当多个类拥有相同的功能时,那么这些类不需要每个都写这些相同的功能,只需要把相同功能抽到 一个单独的类中,继承这个类就能获得这些相同的功能: (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构. 要了解这个体系结构中最共性的内容,就看最顶层的类. 要使用这个体系的功能,就用最底层的类创建对象 (2)好处: A.提高代码复用性: B.继承的出现,让类与类之间产生关系,为多态的前提 (3)特点: A.只能单继承(准确的说是java对多继承进行优化,避

Java基础:3、抽象类和接口

一.抽象类 1.抽象类的基本概念和特点 顾名思义抽象类就是被抽象关键字(abstract)修饰的类,要理解抽象类,可以先从思想层面切入. 从开始学习java开始就常常见到一句话,万物皆对象.然而某些对象之间必然会有共同点,如一些特征或者一些行为.如果在每一个类中都重复的定义着相同的点,那还怎么做称霸整个地球的人类呢?人类当然是能偷懒则偷懒了. 所以说:将不同类的相同点抽象出来成为一个类,这就是抽象类. 那么接下来就来描述一下,抽象类究竟是什么. 抽象类是用abstract修饰的类,抽象类中可以包

python开发面向对象基础:接口类&amp;抽象类&amp;多态&amp;多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1