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

    个人学习笔记,针对本人在自学中遇到的问题。

  • 相关阅读:
    编译原理入门以及战大作业心得(2)汇编简易入门 康某
    简易聊天对话框(源码)
    用js做数字字母混合的随机四位验证码
    HTML5基础
    javascript基础
    jquery.AutoComplete 仿百度文本框感应
    DropDownlist显示树状
    利用 System.Net.Mail 实现邮件发送功能
    sql 根据字段值,查找属于哪个表中的哪个字段
    sql 查看数据库中的各表的大小
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/7045833.html
Copyright © 2011-2022 走看看