`
殇瓶-MIN
  • 浏览: 8474 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

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

阅读更多

 

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

 

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

在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){}
}
 

 

分享到:
评论

相关推荐

    java基础第07讲:面向对象基础(五)

    5. **抽象类与接口的结合**:抽象类可以实现接口,这意味着它可以提供部分或全部接口方法的默认实现,将剩余的实现责任留给其子类。 6. **契约与封装**:接口定义了一个契约,任何实现该接口的类都必须遵循这个契约...

    东北大学c++课程PPT 第5章

    抽象类的主要作用是作为接口,定义派生类必须实现的函数。 5.4 多重继承 多重继承是指一个派生类可以同时从多个基类继承。这在设计时提供了更大的灵活性,但可能导致命名冲突(钻石问题)和复杂性增加。为了解决...

    猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip

    5. 多态:游戏规则可以通过接口或抽象类实现,允许不同的游戏策略。 Kotlin是Google支持的Android开发首选语言,它简化了Java的一些语法,同时保持了面向对象的特性。在Kotlin版本的猜拳游戏中,可以观察到以下特点...

    OOP语言技术比较:Java,C++,Object Pascal

    类是模块化和数据抽象的基础,允许程序员创建自定义的类型。在Java中,类是强类型的,编译器执行严格的类型检查,确保类型安全。相比之下,C++的类型检查相对较弱,因为它兼容C语言的类型转换规则。Object Pascal则...

    Java课设:Java小游戏 内附源代码+PPT

    - 类与对象:游戏中的每个元素,如玩家、电脑对手、石头、剪刀、布等,都可以抽象为类,每个实例则为对象。 - 继承:设计时可能采用继承机制,比如创建一个基础的“参与者”类,然后让“玩家”和“电脑”类继承它...

    pagedGeometry源代码(可用)

    2. `Page.h/cpp`:基础Page类的实现,包含加载和卸载Page的抽象方法,供子类实现。 3. `GeometryPage.h/cpp`:处理具体几何数据的类,实现了LOD切换和对象加载。 4. `pagedGeometry.sln`:Visual Studio解决方案...

    C++编程思想

    1. 封装:这是OOP的基本原则之一,它隐藏了对象内部的实现细节,只对外提供公共接口。通过访问控制修饰符(如public、private、protected),我们可以控制成员变量和函数的可见性,以防止外部代码的不恰当访问。 2....

    Java学习必备/Java初学者的一剂良药

    从基础语法到面向对象的思维,从简单的数据结构到复杂的算法,从代码风格到项目实践,每一个环节都是他们成为优秀Java开发者道路上的铺路石。随着项目学习的不断深入,他们将能够建立起更加全面和立体的知识结构,为...

    C#23语言规范4.0

    - **类型分类**: C#中的数据类型分为两大类——值类型和引用类型。 - **值类型**: 包括基本类型如int、float、bool等,以及结构类型。 - **引用类型**: 包括类、接口、数组等。 - **变量**: 用于存储值的容器,每...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

Global site tag (gtag.js) - Google Analytics