关于面向对象 接口的用处的一个问题?

tuerqizhou 2009-12-10 07:31:50
最近在学习java面向对象
可是一直不明白里面的一个知识点
接口的高级应用是怎么样的?

比如:我写了三个类
1.微波炉的类 微波炉有 开门和关门的方法 有放东西和加热食物等功能。(有皮有壳的食物不能加热)
微波炉 有自己的私有属性 都是封装 有set 和get方法
2.冰箱的类 冰箱有 开门和关门的方法 有房东和冷冻食物等功能。
冰箱 有自己的私有属性 都是封装 有set 和get方法。
3.食物的类 有自己的属性 都是封装的 有set 和get方法。

我写了一个接口将 微波炉类和冰箱类的开门和关门 还有可以放东西的方法聚集在了接口里面。

现在我要用微波炉加热 食物
先创建一个食物的实例 然后调用放入方法 放入食物 然后是加热
1。这样是面向对象吗?
2。接口是这样用的吗?还有没有其他的用法?
...全文
242 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuerqizhou 2009-12-11
  • 打赏
  • 举报
回复
讲的也蛮深刻的
稍微有了一点了解~~~
kyousuke 2009-12-10
  • 打赏
  • 举报
回复
每个事物的行为都是不同的,所以要用到接口,因为接口里面的方法没有实现代码
比如飞机会飞,鸟也会飞,它们都有飞的动作,那么你应该用个抽象类,在里面定义个飞的方法让它们继承吗?
不是的,因为它们飞的方式不一样,小鸟是挥动翅膀,难道飞机也要挥动翅膀飞吗?恐怕没人敢上那架飞机了吧,所以用接口,让它们实现这个接口,然后各自写各自的飞行方式
godismydaughter 2009-12-10
  • 打赏
  • 举报
回复
为什么使用接口
  两个类中的两个类似的功能,调用他们的类动态的决定一种实现,那他们提供一个抽象父类,子类分别实现父类所定义的方法。
  问题的出现:Java是一种单继承的语言,一般情况下,哪个具体类可能已经有了一个超类,解决是给它的父类加父类,或者给它父类的父类加父类,只到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中所有类的修改。
  接口是可插入性的保证。
  在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法,这时候,这些子类具有了可插入性(并且可以用这个接口类型装载,传递实现了他的所有子类)。
  我们关心的不是那一个具体的类,而是这个类是否实现了我们需要的接口。
  接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。
  类型
  使用Java接口将软件单位与内部和外部耦合起来。使用Java接口不是具体的类进行变量的类型声明,方法的返还类型声明,参量的类型声明,以及数据类型的转换。
  在理想的情况下,一个具体的Java类应当只实现Java接口和抽象Java类中声明的方法,而不应当给多余方法。
  类型等级结构
  Java接口(以及抽象类)一般用来作为一个类型的等级结构的起点。
  如果一个类已经有了一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次要的超类型叫做混合类型。
[编辑本段]
Java接口常用方法
  单方法接口
  以下是引用片段:
  public interface Actionlistener{
  public abstract void actionPerformed(ActionEvent event);
  }
  仅且只有一个方法,只有实现了这个接口(重写这个接口中的唯一一个方法),你才有资格去事件监听器列表里注册(参数为Actionlistener类型),当事件源变动时,自动调用这个唯一的actionPerformed方法.
  标识接口
  是没有任何方法和属性的接口。标识接口不对实现它的类有任何语意上的要求,它仅仅表明了实现它的类属于一个特定的类型(传递)。
  不推荐过多的使用标识接口。
  常量接口
  用Java接口来声明一些常量,然后由实现这个接口的类使用这些常量(以前在做画板的时候这么干过)。建议不要模仿这种常量接口的做法。


百度的
cqbbzx 2009-12-10
  • 打赏
  • 举报
回复
接口可以理解为别人给定的一个标准,因为接口里面定义的都是抽象的方法不可以写方法体。只有用实现类去实现它才能完成功能,那么实现这个接口的人就按照别人给出的接口重写抽象方法来完成工作。比如Sun的JDBC给出的一系列的接口,那么谁来实现它呢。实现这些接口的都是各数据库厂商。然后我们只要熟悉sun公司给出的接口就可以了。反正那些数据库厂商写的实现类都重写接口的一套方法。至于哪种数据库底层连接的区别我们不用去操心。这个就是接口的好处
tuerqizhou 2009-12-10
  • 打赏
  • 举报
回复
接口InterfaceE

/**
具有开门,关门和放入食物方法的接口
*/

package interface1;
import oop.Food;
public interface InterfaceE{
public void openDoor();//开门
public void closeDoor();//关门
public void downFood(Food food);//装入食物的方法

}


Food
package oop;
public class Food{
private String name;
private boolean isCover; //判断是否是带皮的东西
private boolean isShell; //判断是否是带壳的东西
private boolean isCooked=false;//判断是否是熟的;
//构造方法
public Food(){
}
public Food(String name,boolean isCover,boolean isShell){
this.name = name;
this.isCover = isCover;
this.isShell = isShell;
}


public void setisCover(boolean isCover){
this.isCover = isCover;
}
public boolean getisCover(){
return this.isCover;
}
public void setisShell(boolean isShell){
this.isShell = isShell;
}
public boolean getisShell(){
return this.isShell;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setisCooked(boolean isCooked){
this.isCooked = isCooked;
}
public boolean isCooked(){
return this.isCooked;
}
}



冰箱类

package Alx;
import oop.Food;
import interface1.*;
public class Alx implements InterfaceE{
private boolean isPower; //电源是否打开
private boolean isOpen; //判断门是否打开
private boolean isCooling; //判断是否正在冷冻食物
private boolean isDownfood=false; //判断是否放进了食物
private boolean isStillcoolFood = true; //判断是否有冷藏柜
private boolean isFastcoolFood = true; //判断是否有冷冻柜
public Food food;
//构造方法
public Alx(){
}
public Alx(boolean isStillcoolFood,boolean isFastcoolFood){
this.isStillcoolFood = isStillcoolFood;
this.isFastcoolFood = isFastcoolFood;
}
//获取和设置是否有冷藏柜
public void setisStillcoolFood(boolean isStillcoolFood){
this.isStillcoolFood = isStillcoolFood;
}
public boolean isStillcoolFood(){
return this.isStillcoolFood;
}
//获取和设置是否有冷冻柜
public void setisFastcoolFood(boolean isFastcoolFood){
this.isFastcoolFood = isFastcoolFood;
}
public boolean isFastcoolFood(){
return this.isFastcoolFood;
}
//获取和设置电源开关是否打开
public void setisPower(boolean isPower){
this.isPower = isPower;
}
public boolean isPower(){
return this.isPower;
}
//获取和设置是否有食物放入
public void setisDownfood(boolean isDownfood){
this.isDownfood = isDownfood;
}
public boolean isDownfood(){
return this.isDownfood;
}
//获取和设置是否有食物在冷冻
public void setisCooling(boolean isCooling){
this.isCooling = isCooling;
}
public boolean isCooling(){
return this.isCooling;
}

//获得门是否关闭 设置有开门关门方法设置
public boolean isOpen(){
return this.isOpen;
}
//开门
public void openDoor(){

this.isOpen = true;

}
//关门
public void closeDoor(){
this.isOpen = false;
}
//放入食物的方法
public void downFood(Food food){
if(isOpen==true){
setisDownfood(true);
}
}
//取出食物的方法
public void getFoodout(){
if(isOpen==true){
setisDownfood(true);
}else{
System.out.println("门没有打开不能把食物拿出");
}
}

//冷藏食物方法
public void stillCoolFood(Food food){
if(isDownfood==true){
if(isPower==true){
if(isStillcoolFood==true){
setisCooling(true); //改变isCooling的值为true;
System.out.println("---"+food.getName()+"StillCooling---");

}
else{
System.out.println("不好意思!没有冷藏柜");
}
}
else{
System.out.println("电源开关没有打开"); }
}
else{
System.out.println("没有放入食物");
}
}
//冷冻食物方法
public void fastCoolFood(Food food){
if(isDownfood==true){
if(isPower==true){
if(isFastcoolFood==true){
setisCooling(true); //改变isCooling的值为true;
System.out.println("---"+food.getName()+"fastCooling---");
}
else{
System.out.println("不好意思!你没有冷冻柜");
}
}
else{
System.out.println("电源开关没有打开"); }
}
else{
System.out.println("没有放入食物");
}
}
}





微波炉类

package oop;
import interface;
public class Microwave implements InterfaceE{
private boolean isPower; //电源是否打开
private boolean isOpen; //判断门是否打开
private boolean isFoodcook;//判断是否正在煮食物
private boolean isDownfood=false;//判断是否放进了食物
public Food food;
//获取和设置电源开关是否打开
public void setisPower(boolean isPower){
this.isPower = isPower;
}
public boolean isPower(){
return this.isPower;
}
//获取和设置是否有食物放入
public void setisDownfood(boolean isDownfood){
this.isDownfood = isDownfood;
}
public boolean isDownfood(){
return this.isDownfood;
}
//获取和设置是否有食物在煮
public void setisFoodcook(boolean isFoodcook){
this.isFoodcook = isFoodcook;
}
public boolean isFoodcook(){
return this.isFoodcook;
}

//获得门是否关闭 设置有开门关门方法设置
public boolean isOpen(){
return this.isOpen;
}
//开门
public void openDoor(){
if(isFoodcook==false){
this.isOpen = true;
}
}
//关门
public void closeDoor(){
this.isOpen = false;
}
//放入食物的方法
public void downFood(Food food){
if(isOpen==true){
food.getisCover();
food.getisShell();
setisDownfood(true);
}else{
System.out.println("门是关的,请打开门再放进食物");
}
}
//取出食物的方法
public void getFoodout(){
if(isOpen==true){
setisDownfood(true);
}else{
System.out.println("门没有打开不能把食物拿出");
}
}

//煮食物设置
public void cookFood(Food food){
if(isDownfood==true){
if(isPower==true){
if(food.getisCover()==false&&food.getisShell()==false){
setisFoodcook(true); //改变isFoodcook的值为true;
food.setisCooked(true);
System.out.println("---"+food.getName()+"Cooking---");
}
else{
System.out.println(food.getName()+"是不能再微波炉中煮的食物");
}
}
else{
System.out.println("电源开关没有打开,请打开电源开关"); }
}
else{
System.out.println("没有放入食物,请放入食物");
}


}
}






望大家多给点意见
学习面向对象是一头的雾水
还不知道接口 在 项目中是怎么应用的?
springbird 2009-12-10
  • 打赏
  • 举报
回复
想了解一下,等待高手解决
tuerqizhou 2009-12-10
  • 打赏
  • 举报
回复
大哥 看清楚题目啊!
我已经将两个类里面的类似的方法都聚集了啊!!
我是疑惑 难道接口就是这样将相类似的东西聚集在一起的?
  • 打赏
  • 举报
回复
接口里面的方法都是抽象方法,实现接口的类才做具体的功能

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧