您的位置:首页 > 其它

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实例:

先定义接口:

//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);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: