Java抽象类与接口

来源:互联网 发布:百度指数数据来源 编辑:程序博客网 时间:2024/05/16 17:15
抽象类
     public abstract class classname{
          protected classname(){
          }
}

抽象方法
     public abstract returntype method(...){
     } 

抽象类的构造方法为protected,因为只能被子类使用,抽象类不可以派生出对象

抽象方法不能包含在非抽象类中。如果抽象子类不能实现抽象父类的所有抽象方法,那么子类也必须定义为抽象的。在抽象类的扩展类中,必须实现所有抽象的方法。

即使父类是具体的,子类也可以是抽象的 

接口:
接口是一种和类相似的结构,只包含常量和抽象方法。目的是指明多个对象的共同行为

修饰符 interface 接口名{
     //常量声明
     //方法签名
}

例如:
     public interface Edible{
          public abstract String howToEat();
}

java中,接口被看作一种特殊的类,像常规类一样被编译。和抽象类相似,不能使用new操作符创建实例。
需要使用implements来实现接口。类和接口之间的关系称为接口继承。
public class test{
        public static void main(String[] args)
       {
              Object[] object = { new Tiger(),new Chicken(),new Apple()};
               for(int i = 0; i < object.length; i++)
              {
                      if(object[i] instanceof Edible)
                     {
                           System. out.println(((Edible)object[i]).howToEat());
                     }
              }
       }
}


class Animal{
       
}



interface Edible{
        public abstract String howToEat();
}

class Chicken extends Animal implements Edible{
        public String howToEat(){
               return "Chicken: fry it" ;
       }
}

class Tiger extends Animal{
       
}


abstract class Fruit implements Edible{
}

class Apple extends Fruit{
        public String howToEat(){
               return "Apple: Make apple cider" ;
       }
}

class Orange extends Fruit{
        public String howToEat(){
               return "Orange: Make orange juice" ;
       }
}

//answer: 
Chicken: fry it
Apple: Make apple cider


ActionListener接口:
     监听器
     不是所有对象都能成为动作事件的监听器:
     1。这个对象必须是ActionListener接口的一个实例,这个接口定义了所有动作监听器的共有动作
     2。ActionListener对象listener必须使用方法source.addActionListener(listener)注册给原对象。
import javax.swing.*;
import java.awt.event.*;

public class HandleEvent extends JFrame {
        public HandleEvent(){
              JButton jbtOK = new JButton("OK" );
              JButton jbtCancel = new JButton("Cancel" );
              
              JPanel panel = new JPanel();
              panel.add(jbtOK);
              panel.add(jbtCancel);
              
              add(panel);
              
              OKListenerClass listener1 = new OKListenerClass();
              CancelListenerClass listener2 = new CancelListenerClass();
              
              jbtOK.addActionListener(listener1);
              jbtCancel.addActionListener(listener2);
              
       }
       
        public static void main(String[] args)
       {
              JFrame frame = new HandleEvent();
              frame.setTitle( "Handle Event");
              frame.setSize(200,150);
              frame.setLocation(200,100);
              frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
              frame.setVisible( true);
       }

}

class OKListenerClass implements ActionListener{
        public void actionPerformed(ActionEvent e){
              System. out.println("OK button clicked" );
       }
}

class CancelListenerClass implements ActionListener{
        public void actionPerformed(ActionEvent e){
              System. out.println("Cancel button clicked" );
       }
}



接口可以继承其他接口,这样的接口称为子接口。接口只可以扩展接口,而类可以扩展类和接口。