Interface和Abstract Class
2014-02-18 11:41
363 查看
Interface:接口
Abstract Class:抽象类
Class:类,包括抽象类。
学 Java 的人,或学 OO 编程的人,都是要弄清楚这两个概念的区别。
现将我的观点说一下。
在OO中,Interface 和Abstract Class 是两个不同的概念。
1。Abstract Class类似于 Abstract Data Type(抽象数据类型),它定义了它所有的subclass(子类)应该有的特性,就是在Abstract Class 中声明方法和变量。如定义一种抽象类型:车。那么在Java中,就要在class或method上加上
abstract。举个例:
public abstract class 车
{
public int 轮子;
public abstract void 移动();
}
这个抽象类就声明了所有的车应有的特征(如轮子)和行为(如移动)。之后你就可以扩展(extend)这个抽象类,只要是车,就可以,还有你可以在子类(subclass)中加入自己的特征,如
public class 跑车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 引擎类型() //属于自己(跑车)的行为
{
System.out.println("高级引擎");
}
轮子=4;
}
public class 自行车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 爆胎() //属于自己(自行车)的行为
{
System.out.println("我走不动了");
}
轮子=2;
}
2。Interface 则用来定义一个协议,所有的方法都可以实现它。一个Interface定义了方法,和最终静态(final static)变量,所有实现这个Interface的都要保证实现的东西与这个Interface 定义的行为一致。使用Interface可以让Object(对象)在一定的规范下沟通。
如
public interface TCP协议
{
public void 打开端口();
public void 关闭端口();
}
这样的话,只要实现这个Interface的都可以使用这两个方法交流。
在 Java平台里,它们主要有3个不同点:
1。一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2。在Abstract Class内,你可以有不抽象(Abstract)的方法,即有意义的方法,但Interface不行。
如
public abstract class 车
{
public int 轮子;
public abstract void 移动();
public String 我是什么()
{
return "车子";
}
}
3。Interface不属于 继承范围。即不可能成为超类(Super Class)
4.Interface实例:
先定义接口:
}
实现接口:
在B类中implementsA后实现接口,然后A,B类中都可以使用实现化的接口方法
B implements A
abstract class实例:
Abstract Class:抽象类
Class:类,包括抽象类。
学 Java 的人,或学 OO 编程的人,都是要弄清楚这两个概念的区别。
现将我的观点说一下。
在OO中,Interface 和Abstract Class 是两个不同的概念。
1。Abstract Class类似于 Abstract Data Type(抽象数据类型),它定义了它所有的subclass(子类)应该有的特性,就是在Abstract Class 中声明方法和变量。如定义一种抽象类型:车。那么在Java中,就要在class或method上加上
abstract。举个例:
public abstract class 车
{
public int 轮子;
public abstract void 移动();
}
这个抽象类就声明了所有的车应有的特征(如轮子)和行为(如移动)。之后你就可以扩展(extend)这个抽象类,只要是车,就可以,还有你可以在子类(subclass)中加入自己的特征,如
public class 跑车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 引擎类型() //属于自己(跑车)的行为
{
System.out.println("高级引擎");
}
轮子=4;
}
public class 自行车 extends 车
{
public void 移动()
{
System.out.println("我在移动");
}
public void 爆胎() //属于自己(自行车)的行为
{
System.out.println("我走不动了");
}
轮子=2;
}
2。Interface 则用来定义一个协议,所有的方法都可以实现它。一个Interface定义了方法,和最终静态(final static)变量,所有实现这个Interface的都要保证实现的东西与这个Interface 定义的行为一致。使用Interface可以让Object(对象)在一定的规范下沟通。
如
public interface TCP协议
{
public void 打开端口();
public void 关闭端口();
}
这样的话,只要实现这个Interface的都可以使用这两个方法交流。
在 Java平台里,它们主要有3个不同点:
1。一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2。在Abstract Class内,你可以有不抽象(Abstract)的方法,即有意义的方法,但Interface不行。
如
public abstract class 车
{
public int 轮子;
public abstract void 移动();
public String 我是什么()
{
return "车子";
}
}
3。Interface不属于 继承范围。即不可能成为超类(Super Class)
4.Interface实例:
先定义接口:
//xlh_add 定义接口 public interface A{ public void onList(); public void onPlayer(); public void onback(); public void onTouchListen(); } private MediaControllerPort mListListener; public void setOnMediaControllerPort(MediaControllerPort i){ mListListener = i; } public void setMediaPlayer(MediaPlayerControl player) { mPlayer = player; //使用实现化的接口 mListListener.onPlayer();
}
实现接口:
在B类中implementsA后实现接口,然后A,B类中都可以使用实现化的接口方法
B implements A
@Override public void onPlayer() { // TODO Auto-generated method stub } @Override public void onback() { // TODO Auto-generated method stub finish(); Log.v("xulongheng*VideoViewActivity", "onback"); } @Override public void onTouchListen(MotionEvent event) { // TODO Auto-generated method stub }5.
abstract class实例:
public abstract class A implements Serializable{ //������� public final static String KEY_LOGO="icon"; public final static String LEAGUE_NAME="league"; public final static String KEY_ITEM="item"; public final static String KEY_DATA="data"; public final static String KEY_VERSION = "version"; public final static String KEY_CONTENT = "content"; public final static String KEY_DATE="date"; public final static String KEY_MATCHES = "matches"; public final static String KEY_ID = "id"; public final static String KEY_START_TIME ="start_time"; public final static String KEY_TITLE ="title"; public final static String KEY_LEAGUE ="league"; public final static String KEY_HOME_TEAM ="home_team"; public final static String KEY_AWAY_TEAM ="away_team"; public final static String KEY_HOME_LOGO ="home_team_logo"; public final static String KEY_AWAY_LOGO ="away_team_logo"; public final static String KEY_HIGHLIGHT ="highlight"; public final static String KEY_TYPE ="type"; public abstract void paser(JSONObject json) throws Exception ; public String err; public static void paserKeys(JSONArray arr,LinkedHashMap<String, String> map) throws Exception { Log.v("xlh", "paserkeys"); } }然后extends继承实现需要的方式和使用需要的变量:
public class B extends A { public String channel; public String url; err=""; public void paser(JSONObject json) throws Exception { channel = json.optString("channel", null); url = json.optString("url", null); } }
相关文章推荐
- 非常到位的关于interface与abstract class的总结
- abstract class与interface
- Servlet学习笔记(五)—— java中abstract class 与 interface 的关联
- 深度理解abstract class和interface
- 11)Java abstract class 和 interface
- abstract class和interface有什么区别
- abstract class跟interface的区别
- abstract class和interface
- 详细解析Java中抽象类和接口的区别 abstract class和interface
- Interface 和 Abstract class
- 深入理解abstract class和interface【转载】
- 深入理解abstract class和interface 选择自 legendinfo 的 Blog 原文地址:http://dev.csdn.net/develop/article/58/58170.shtm
- 深入理解abstract class和interface
- java中抽象类(abstract class)和接口(interface)
- 深入理解abstract class和interface
- 深入理解abstract class和interface
- 抽象类(abstract class)和接口(interface)
- 深入理解abstract class和interface
- 深入理解abstract class和interface
- Java中abstract class和interface的区别