基礎の石——インタフェース、抽象類



基礎の石——インタフェース、抽象類
 
クラスの中でインタフェースと抽象クラスの2つの概念をついでに話したいと思っていたが、どうして自分がサボって前の2つのブログを整理していなかったのだろうか.イベントを説明する前に、インタフェースに言及せざるを得ず、インタフェースという概念があれば抽象クラスをよりよく説明することができる.このブログでは、インタフェース、抽象クラス、イベントの3つの概念が表示されます.
Javaでは、インタフェースには2つの意味があります.1つは、概念的なインタフェース、すなわち、外部アクセス者に直接使用できるすべての方法と属性からなるインタフェースを指します.C++の授業を受ける時、先生が言ったようなインタフェース.二、インターネットキーワードで定義された実在的なインタフェースを指し、インタフェースタイプとも呼ばれる.定数値(定数アルファベットは一般的にすべて大文字)と抽象メソッド(関数体を定義していないメソッド)を定義します.
ここでいうインタフェースは第2の意味のインタフェースであり,インタフェースも一種であるが,インタフェースには構造方法がなく,具体的な実装方法がなく,オブジェクトを作成できない.
インタフェースの定義:
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){}
}