`
殇瓶-MIN
  • 浏览: 8444 次
  • 性别: 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中抽象类和接口的区别

    这种差异意味着接口更适合用于定义对象间的行为规范,而抽象类则适合定义一组紧密相关的类的共同属性和行为的基础框架。 ##### 成员变量与默认实现 - **抽象类**:可以拥有成员变量(包括静态和非静态的)、构造器...

    接口与抽象类区别

    接口与抽象类区别 在软件开发中,接口和抽象类是两个常用的概念,但它们之间的区别却让许多人感到困惑。那么,什么是抽象类和接口?它们之间有什么区别?下面,我们就来详细地探讨这个问题。 一、抽象类 抽象类是...

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    在C#编程语言中,类、接口、虚方法和抽象方法是面向对象设计的重要组成部分。这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有...

    java利用接口和抽象类改写求圆的面积和梯形的面积.docx

    ### Java利用接口和抽象类改写求圆的面积和梯形的面积 ...通过以上示例,我们可以看到接口和抽象类在实现特定功能时的不同之处。使用接口和抽象类可以帮助我们更好地组织代码,并使代码更具灵活性和可维护性。

    java抽象类与接口实例java抽象类与接口实例

    java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...

    C#抽象类与接口方法

    【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...

    Java基础知识:接口和抽象类

    Java 基础知识:接口和抽象类 在 Java 编程中,接口和抽象类是两个重要的概念,它们都用于实现面向对象编程中的抽象和封装,但在使用方式和功能上有所不同。 1. 接口(Interface) 接口是一种抽象的数据类型,它...

    接口抽象类

    在编程领域,接口和抽象类是面向对象设计中的重要概念,它们在软件工程中起着至关重要的作用。本文将深入探讨“接口抽象类”的主题,包括它们的概念、用途、区别以及在Java编程语言中的实现。 首先,让我们了解什么...

    Java 接口和抽象类

    Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...

    博客资源-《java基础——接口》

    在本文中,我们将深入探讨Java接口的基础知识,包括接口的定义、使用、接口与抽象类的区别以及接口中的默认方法等核心知识点。 首先,接口在Java中是一个完全抽象的类型,它只包含常量定义和抽象方法声明,不包含...

    java中接口与抽象类的详细分析与比较

    在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键概念,它们各自有特定的用途和优缺点。本文将深入探讨这两种概念,帮助你理解它们之间的区别以及如何在实际开发中选择使用...

    C#接口抽象类区别实例

    c#中抽象类和接口。 相同点: (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 (4) 派生类必须实现未实现的方法 区 别: (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、...

    11.java接口和抽象类的区别.zip

    11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....

    c# 中抽象类和接口的学习

    抽象类是一种特殊的类,它不能被实例化,其主要目的是作为其他类的基础,提供一个基本的结构。抽象类可以包含抽象方法、属性、索引器和事件,这些成员没有具体的实现,必须由继承该抽象类的派生类来具体实现。抽象类...

    抽象类和接口实验报告.doc

    抽象类和接口实验报告

    Android之大话设计模式——:抽象工厂模式参考.pdf

    Android之大话设计模式——:抽象工厂模式参考.pdf

    java中的抽象类和接口的理解

    抽象类的主要用途是作为其他类的基础类,通过继承抽象类来实现或重写其中的抽象方法。 **特点:** 1. **抽象类可以有构造器**:这使得抽象类能够初始化其状态,这对于共享状态的子类来说非常有用。 2. **抽象类...

Global site tag (gtag.js) - Google Analytics