Touch_Java 6:接口和多态

来源:互联网 发布:办公软件高级应用 编辑:程序博客网 时间:2024/06/06 03:02

一、接口


java不支持多继承性,因此一个类只有一个父类
单继承性,使java更简单,易于管理和维护

1. 接口的声明和使用


接口的定义分为接口的声明和接口体

interface  name
{
abstract  show_name();
}

(1)接口的声明
      第一行语句叫做接口的声明,
      interface  接口名

(2)大括号内的语句称为接口体
      接口体内包括常量的声明和接口方法的定义
      接口中的常量都是访问权限为public的static常量,不能含有变量
      (可以省略public static final修饰符)
      接口中的方法都是抽象方法,只允许声明,不允许实现
      例如上例中类体中的抽象方法:abstract  show_name();只有这一行语句,不允许实现方法

(3)接口的使用
      在java中,由类实现接口,用来实现接口中的方法,一个类可以实现多个接口
      用implements引入要实现的接口,两个以上的接口用逗号间隔开
      例如类A实现B,C接口,则声明类时应该这样写:
      public class A implements B,C
      {
      }
      
      如果A的子类a实现B,C接口,写法如下
      public class a extends A implements B,C
      {
      }
      如果一个类实现了一个接口,则这个类必须重写这个接口中的所有抽象方法
      重写接口中方法时,方法的访问权限一定要是public,否则降低了方法的访问权限

(4)引入类库中的接口
      通过import关键字引入类库时,也同时引入了类库中的接口
      因此在定义类时,可以直接调用接口,然后在类中实现
      

二、接口使用例子


简单例子,求1-100的和


接口的代码:


package suchafool;public interface methods {int sum();}

实现接口的类的代码:


package suchafool;public class Main implements methods //引入接口{int sum_ = 0;public int sum()//重写接口中的方法{for(int i=0; i<=100; i++)//1-100求和sum_ += i;return sum_;}    public static void main(String []args)//main方法,不建议这样写,可以重新建一个类实现main方法,并进行测试    {    Main main = new Main();    System.out.println("1-100的和为:"+main.sum());    }}

运行结果:


1-100的和为:5050

注意:


类重写的接口中的方法以及接口中的常量,都可以被该类创建的对象调用
比如上述例子中接口可以加一行语句

final int x = 1;

然后在主类中加一行语句

System.out.println(methods.x);

接口中的常量也可以通过接口名直接调用

接口的修饰符:

如果在声明接口时,在interface前加public修饰符,则该接口可以被任何类实现
如果不加,则称该接口为友好接口类,只能被在同一个包中的类实现

如果父类实现了某个接口,则子类不用明显的声明和实现接口

如上例中:
可以新建一个Main的子类

package suchafool;public class mains extends Main//实现了methods接口类的子类{public int s(){return sum();//返回从父类继承的、父辈已经实现的接口中的方法}}

同时在Main类中添加一下语句进行测试

mains s = new mains();    System.out.println("子类调用接口中的方法输出结果为:"+s.s());


运行结果

1-100的和为:5050
1
子类调用接口中的方法输出结果为:5050


接口的继承


接口可以被继承,即可以通过extends,声明一个接口为是另一个接口的子接口
由于父接口中的方法和常量都是public修饰的,因此子接口可以全部继承
如果一个类实现了一个接口,却没有实现接口中的抽象方法,则这个类必须是抽象类

理解接口回调:


接口回调的定义:

把实现某一接口类创建对象的引用赋值给该接口创建的接口变量
使该接口变量可以调用类实现的接口方法


步骤:    声明一个接口变量
将实现接口类创建对象的引用赋值给接口变量
接口变量调用类中实现了接口中的方法
即完成接口回调过程

例子:


接口代码:

interface compute //定义一个接口{abstract int add();//声明一个抽象方法,abstract修饰符可以省略}


实现接口类:

class Test_interface implements compute//实现compute接口{public int add()//重写接口中的add方法{int sum = 0;for(int i = 0;i<11; i++)sum += i;return sum;}public static void main(String[] args) {compute com;//声明一个接口变量com = new Test_interface();//将实现接口的类Test_interface创建对象的引用赋值给接口变量com.add();//接口变量调用类中实现的接口方法System.out.println(com.add());//输出结果}}

运行结果:

55

接口的多态性:


由于不同类实现接口有不同的方式,因此接口在回调时,就有多种选择,
因此接口变量就有多种形态,称为接口的多态

abstract类和接口区别


abstract类中可以有常量、变量,抽象方法,非抽象方法
而接口中只有常量和抽象方法

在选择时,如果程序不需要继承变量,只需要实现某些方法,则选择接口
如果需要继承父类一些方法和变量,则可以考虑抽象类


原创粉丝点击