Java基础——关于接口和抽象类的几道练习题
呃,一定要理解之后自己敲!!!这几道题,使我进一步了解了接口和抽象类。
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基础——关于接口和抽象类的几道练习题的更多相关文章
- 【Java基础】接口和抽象类之间的对比
Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...
- Java基础之接口与抽象类及多态、内部类
final关键字 被其修饰的类,不能被继承. 被其修饰的方法,不能被覆盖. 被其修饰的变量,是一个常量,不能被修改,所以定义时必须初始化(和C++的const类似). 一般有final,会搭配stat ...
- Java基础(四)--接口和抽象类
接口和抽象类能够体现OOP的抽象,而接口和抽象类也是日常开发中经常用到的 抽象方法: 抽象方法就是被abstract修饰的方法,只有声明,没有实现,也就是没有方法体 public abstract v ...
- java基础之接口(抽象类与接口的区别)
概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...
- 【java基础】接口VS抽象类
1.至少有一个被abstract修饰的方法,同时修饰类名的类为抽象类,抽象的方法必须被子类覆盖,抽象的类必须被继承,抽象的类可以包含非抽象方法,只能单继承. 2.接口中所有的变量是static fin ...
- 30.Java基础_接口_抽象类_具体类实现案例
public interface SpeakEnglish { public abstract void speak(); } public abstract class Person { priva ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
- Java基础-面向接口(interface)编程
Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...
随机推荐
- Ms17-010进行WEB提权之实践下某培训靶机服务器
前言:该机器为某个其他培训机构的靶机,说实话在这里没炫耀啥,只是给各位学习Ms17010的同学指一条路,我原先也折腾这玩意儿好久,但是就是不行,最近才找到了出路,所以多写两篇文章,把各种需要注意的地方 ...
- 跟着刚哥学Redis
NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL".是对不同于传统的关系型数据库的数据库管理系统的统称.它泛指非关系型的数据库.随着 ...
- mongodb 初学 意外 连接服务器异常(Connection refused)
啦啦啦 这种情况 root@localhost:/# mongo MongoDB shell version: connecting to: test --31T07:: W NETWORK [thr ...
- SDK 上报信息 史上最全 持续更新
SDK 上报信息 史上最全 持续更新 接入SDK总会遇到各种需求,有些SDK巴不得把玩家信息全部上报到他们服务器! 以下是我接SDK遇到的, 欢迎大家补全. 上报事件 注册(按道理这个应该是SDK的功 ...
- alembic教程
安装 pip install alembic 步骤 1.初始化 alembic 仓库 在终端中, cd 到你的项目目录中,然后执行命令 alembic init alembic ,创建一个名叫 ale ...
- odoo开发笔记 -- odoo源码解析
odoo 源码解析:http://blog.csdn.net/weixin_35737303
- Docker 之web api 访问 host sql server
运行 Docker C:\Users\Administrator>docker run -it -p 5000:5000 --name myapidocker1 webapiv1 root@3 ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
Tensorflow Welcome to the Tensorflow Tutorial! In this notebook you will learn all the basics of Ten ...
- 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...
- 怎么样imageview实现铺满全屏
<ImageView android:layout_width="match_parent" android:layout_height="match_parent ...