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

 

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

 

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

在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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值