当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

基础之石——接口、抽象类

发表于: 2014-07-22   作者:殇瓶-MIN   来源:转载   浏览:
摘要:   基础之石——接口、抽象类   本想在类中顺便提一下接口与抽象类这两个概念的,怎料自己偷懒并未将前两篇博文重新整理一番。在说明事件之前,不得不提到接口,有了接口这一概念可以更好的说明抽象类。在这篇博文中,会出现三个概念:接口、抽象类、事件。 在Java中,接口有两种意思:一、指概念性的接口,即能够被外部访问者直接使用的所有方法和属性构成的接口。在上C++课程时,老师所提

 

基础之石——接口、抽象类

 

本想在类中顺便提一下接口与抽象类这两个概念的,怎料自己偷懒并未将前两篇博文重新整理一番。在说明事件之前,不得不提到接口,有了接口这一概念可以更好的说明抽象类。在这篇博文中,会出现三个概念:接口、抽象类、事件。

在Java中,接口有两种意思:一、指概念性的接口,即能够被外部访问者直接使用的所有方法和属性构成的接口。在上C++课程时,老师所提到的那类接口;二、指用interface关键字定义的实实在在的接口,也称为接口类型。定义了常量值(常量字母一般全都大写)及抽象方法(未定义函数体的方法)。

我们这里所说的接口为第二种意思的接口,虽然接口也是一种类,但是接口无构造方法且无具体实现的方法,无法创建对象。

定义接口:

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

/**
 *  定义棋盘的接口类型
 *  定义接口的关键字为interface,一个接口不能实现另一个接口,但是可以继承多个接口、不能继承类,这丰富了类的继承
 * @author Daily
 *
 */
public interface GobangCofig extends java.awt.event.ActionListener,java.awt.event.KeyListener{	// 定义接口的关键字为interface
	// 定义接口的常量的五种方法
	public static final int START_X = 30;	// 棋盘起点的横坐标
	public final static int START_Y = 50;	// 棋盘起点的纵坐标
	static final int TRANS_LONG_LINE = 15;	// 棋盘横竖线的条数
	final static int CHESS_SIZE = 28;		//棋子的大小
	int SIZE = 30;							// 格子的大小
	
	// 定义抽象方法
	/**
	 *  横向判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public abstract int row(int x, int y);
	/**
	 *  纵向判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	abstract int column(int x, int y);
	/**  
	 *  斜向上判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public int slant_up(int x, int y);
	/**
	 *  斜向下计数
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	int slant_down(int x, int y);
}

 

定义类来实现接口:

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

/**
 *  定义绘制五子棋的界面类,继承JFrame并实现GobangConfig接口
 *  接口必须通过类来实现它的抽象方法,实现接口的关键字implements,且该类必须实现接口的所有抽象方法
 * @author Daily
 *
 */
public class GobangUI extends javax.swing.JFrame implements GobangCofig{
	/**
	 *  横向判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public  int row(int x, int y){
		return 0;
	}
	/**	
	 * 纵向判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public int column(int x, int y) {
		return 0;
	}
	/**  
	 *  斜向上判断
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public int slant_up(int x, int y){
		return 0;
	}
	/**
	 *  斜向下计数
	 * @param x 当前放置棋子的坐标
	 * @param y
	 * @return	计数
	 */
	public int slant_down(int x, int y){
		return 0;
	}
	/**
	 * Invoked when an action occurs.
	 */
	public void actionPerformed(ActionEvent e){
	    	
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
			
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}
 

 

抽象类与接口的相同点:1、都不能被实例化;2、都能包含抽象方法。

抽象类与接口的主要区别:

1、抽象类中可以为部分方法提供默认的实现,而避免了子类重复实现;

2、抽象类具有一般类所具有的构造方法和具体实现的普通方法。 

综上而言,抽象类是一般类与接口的集合体,可以自动提供部分方法的实现,但是不能创建对象。

 

抽象类的定义:(自己还没写过抽象类,因此将MouseAdapter类的源码copy上了,写明相关关键点)

/*
 * 抽象类的关键字为abstract class
 * 在抽象类中,我们可以定义属性、构造方法、普通方法、常量、抽象方法
 * (我们可以将抽象类看做是:一般类与接口的集合)
 * @since 1.1
 */
public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {
    /**
     * {@inheritDoc}
     */
    public void mouseClicked(MouseEvent e) {}

    /**
     * {@inheritDoc}
     */
    public void mousePressed(MouseEvent e) {}

    /**
     * {@inheritDoc}
     */
    public void mouseReleased(MouseEvent e) {}

    /**
     * {@inheritDoc}
     */
    public void mouseEntered(MouseEvent e) {}

    /**
     * {@inheritDoc}
     */
    public void mouseExited(MouseEvent e) {}

    /**
     * {@inheritDoc}
     * @since 1.6
     */
    public void mouseWheelMoved(MouseWheelEvent e){}

    /**
     * {@inheritDoc}
     * @since 1.6
     */
    public void mouseDragged(MouseEvent e){}

    /**
     * {@inheritDoc}
     * @since 1.6
     */
    public void mouseMoved(MouseEvent e){}
}
 

 

基础之石——接口、抽象类

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
抽象类和接口是何方神圣?在没有实践的时候,在我的脑海中它们只是两个很相似的概念,但是等派上用
抽象类 C#允许把类和方法声明为abstract,即抽象类和抽象方法。抽象类通常代表一个抽象概念,它提供
在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为
关于接口、继承,想大家都不陌生,抽象类也好,接口也好,继承也罢,包括上一篇介绍的方法重写,都
继承是面向对象三大特征之一,也是实现软件复用的重要手段。Java的继承具有单继承的特点,每个子类
今天给大家带来了抽象类与接口、正所谓不懂得抽象的程序员不完全算是程序员 抽象类 一句话抽象类就
继承 /** 将学生和工人的共性描述提取出来,单独进行描述, 只要让学生和工人与单独描述的这个类有关
继承 /** 将学生和工人的共性描述提取出来,单独进行描述, 只要让学生和工人与单独描述的这个类有关
继承 /** 将学生和工人的共性描述提取出来,单独进行描述, 只要让学生和工人与单独描述的这个类有关
继承 /** 将学生和工人的共性描述提取出来,单独进行描述, 只要让学生和工人与单独描述的这个类有关
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号