呃,一定要理解之后自己敲!!!这几道题,使我进一步了解了接口和抽象类。

1.设计一个商品类 字段:

商品名称,重量,价格,配件数量,配件制造厂商(是数组,因为可能有多个制造厂商)

要求: 有构造函数

重写 toString 方法

重写 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.设计一个抽象类,并演示它的使用 (三级)

 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 } }

4.设计一个类,可以同时实现多个接口

 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();
}
}

5.设计一个类,在继承一个类的同时,实现其的两个接口(具体是什么接口自行设计)

 package TT;
interface 建筑标准{
void kaimen();
void guamen();
}
interface 银行标准
{
int MONEY=900000; //接口中的变量,全相当于public static final 类型的
void 取钱();
void 存钱();
} class 金融机构{
void 货币流通(){
System.out.println("货币流通");
}
}
class 工商银行 extends 金融机构 implements 银行标准, 建筑标准 { public void 取钱() {
System.out.println("钱进了银行");
} public void 存钱() {
System.out.println("钱从银行进行个人手里");
} @Override
public void kaimen() {
System.out.println("银行有个大门,能打开"); } @Override
public void guamen() {
System.out.println("银行有个铁门,关了以后谁都进不来了"); } } class Test4{
public static void main(String[] args) {
工商银行 bank=new 工商银行();
bank.取钱() ;
bank.存钱() ;
System.out.println("银行的底是"+bank.MONEY); bank.kaimen();
bank.guamen(); bank.货币流通(); }
}

最后的彩蛋彩蛋彩蛋!!!!

由于我在练习的时候将这几个例题放在了同一个TT包下,一共有5个文件。最后的最后,上面的后三个例子开始报错(比如报错:The type 银行标准 is already defined)。

啊啊啊啊,调试半个小时,都没弄好。后来静一下想,既然Eclipse提示XXX已经定义了,是不是只要在同一个包下,无论你建立多少个类,里面都不能重复定义相同类名文件呢?之后就开始Delete两个),果然,成功啦。仔细一想,既然同一个包下,公共类之间可以访问,这种排同性就是验证啊,也可以省下很多资源。

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

  1. 【Java基础】接口和抽象类之间的对比

    Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...

  2. Java基础之接口与抽象类及多态、内部类

    final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...

  3. Java基础(四)--接口和抽象类

    接口和抽象类能够体现OOP的抽象,而接口和抽象类也是日常开发中经常用到的 抽象方法: 抽象方法就是被abstract修饰的方法,只有声明,没有实现,也就是没有方法体 public abstract v ...

  4. java基础之接口(抽象类与接口的区别)

    概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...

  5. 【java基础】接口VS抽象类

    1.至少有一个被abstract修饰的方法,同时修饰类名的类为抽象类,抽象的方法必须被子类覆盖,抽象的类必须被继承,抽象的类可以包含非抽象方法,只能单继承. 2.接口中所有的变量是static fin ...

  6. 30.Java基础_接口_抽象类_具体类实现案例

    public interface SpeakEnglish { public abstract void speak(); } public abstract class Person { priva ...

  7. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  8. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  9. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

随机推荐

  1. 真实项目中VS2015中自建T4模板生成文件的使用

    有可能许多小伙伴们发现,vs2015和2012的自带T4模板中的.tt文件改变非常之多,如果仅仅copyEF系统自己生成的模板文件,那可累了.以下是我自己整理的在2012和2015中都可以试用的代码. ...

  2. springboot + mybatis + 多数据源

    此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1) ...

  3. C# 中 DataTable转换成IList

    在用C#作开发的时候经常要把DataTable转换成IList:操作DataTable比较麻烦,把DataTable转换成IList,以对象实体作为IList的元素,操作起来就非常方便. 注意:实体的 ...

  4. [HTML] css3 输入框input类型为number时,去掉上下箭头方式

    <input type="number" ...> <style> input::-webkit-outer-spin-button, input::-we ...

  5. 【sping揭秘】8、容器内部事件发布(一)

    容器内部事件发布 Spring的applicationContext容器提供的容器内事件发布功能,是通过java提供的自定义事件实现的 事件类型:eventObject 类继承 事件监听:eventL ...

  6. cmd生成文件目录tree

    一.生成 目录tree 到 控制台 有时候需要快速生成一个文件夹中所有成员的 目录tree,可以通过 cmd命令直接生成 命令:tree /f 二.生成 目录tree 到 指定文件 如果想讲目录树生成 ...

  7. python再探

    python是一门强大的高级编程语言,之前的文章中介绍了python的基础知识,接下来会介绍一些python更为高级的知识. 面向对象编程 基本知识 一般编程思想分为面向过程和面向对象,前者的基本单元 ...

  8. 九、将cs文件快速的转换成可执行文件和响应文件(配置编译开关的文件)

    1.将包含多个类型的源代码文件转换为可以部署的文件.有如下Program.cs的文件,代码如下: public sealed class Program { public static void Ma ...

  9. SpringBoot + docker + neo4j

    下拉镜像 docker pull neo4j 启动镜像 docker run -d -p 7473:7473 -p 7687:7687 -p 7474:7474 neo4j 打开浏览器:http:// ...

  10. MyBatis 注解配置

    Employee package com.example.demo.domain; import java.io.Serializable; public class Employee impleme ...