章节五、4-接口
一、接口
接口是特殊的抽象类,接口通常用interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口是java中的引用数据类型,和类很像,如果抽象类中所有的方法都是抽象方法,这时候就可以用另外一种形式来显示,这种形式就是接口。
二、java不能多继承,当能通过接口多实现。接口不是被类继承了,而是要被类实现。
三、接口不能被实例化,需要覆盖接口中所有的抽象方法,然后才能用子类来实现实例化,
四、eclipse中如何新建一个接口?
打开eclipse—》点击File—》点击new—》点击interface—》给该接口命名—》点击finish即可建立成功。
eclipse是一个开放源代码的、基于java的可扩展开放平台,是java的集成开发环境,也可作为其它语言的集成开发环境。
五、接口实现
1、新建一个名为Inter接口如下:
package introduction7; public interface Inter { /*接口中的成员一般有抽象方法和全局常量两种,而且这两种都有固定的修饰符 * 成员都是由public来修饰,成员常量用public static final来修饰, * 方法用public abstract来修饰。 * 如果不写会默认加上,只要是接口中的方法和变量都固定有这些修饰符。 */ /* * public表示该全局常量权限为公共的 * static表示该全局产量能够类名直接访问 * final表示该全局常量是一个固定不变的值 * (只能是 public abstract,其他修饰符都会报错) */ public static final int NUM = 4; public static final String speed = "100"; public abstract void show1(); public abstract void show2(); public abstract void engineStart(String engineType,boolean isKeyless); }
2、然后再新建一个名为InterfaceDemo类并实现Inter接口:
刚实现时程序会报错,这是因为我们没有实现接口中的抽象类,
因为我们使用了eclipse java集成开发环境,所以有两种方式来解决此问题,
第一种,手动重写接口中的所有方法,
第二种,将鼠标指针移动到报错的类名上,然后点击弹出的提示“Add unimplemented methods”上
然后eclipse会自动实现所有抽象方法,
实现后
package introduction7; //实现接口的关键字为implements public class InterfaceDemo implements Inter{ @Override public void show1() { // TODO Auto-generated method stub System.out.println("这是接口中抽象方法show1的实现。。。"); } @Override public void show2() { // TODO Auto-generated method stub System.out.println("这是接口中抽象方法show2的实现。。。"); } @Override public void engineStart(String engineType, boolean isKeyless) { // TODO Auto-generated method stub System.out.println("这是接口中抽象方法engineStart的实现。。。"); } }
3、新建一个InterfaceDemo1类来调用InterfaceDemo类
package introduction7;import java.awt.TexturePaint; public class InterfaceDemo1 { public static void main(String[] args) { //首先创建一个实现了Inter接口的InterfaceDemo类 //格式:接口类型 接口变量名 = 关键字new 实例了该接口的子类 /* * 这样调用体现了java三大特性(封装、继承、多态)之一---》多态, * 多态也就是一个事物的多种形态, * 例如动物是父类,狗是子类: * 动物 x = new 狗(); * 也可以写成: 狗 x = new 狗(); * 通过以上实例可知:同样一个狗对象,却具备了两种类型, * 小狗表示的是它,动物也表示它。 * 当面对共性类型时,所以的子类对象都可以接收,说明这样提高了代码的扩展性, * 这就是多态的好处。 * 多态的前提就是首先相互之间要有关系,要么是继承关系,要么是实现关系, * 通常要有覆盖,因为抽象方法不覆盖无法使用, */ Inter myInter = new InterfaceDemo(); //因此也可以写成子类的类型(InterfaceDemo类相当于Inter接口的子类): // InterfaceDemo myInter = new InterfaceDemo(); //调用InterfaceDemo类中的engineStart方法 myInter.engineStart("6 cy1", true); } }
打印接果为:
六、如何实现多接口?
1、新建一个名为BMWInterface的接口
package introduction7; public interface BMWInterface { public void Navigation(); }
2、在已经实现了Inter接口的InterfaceDemo类中继续实现BMWInterface接口,如果实现后类名报错,是因为该类中还没有实现BMWInterface接口中的方法。
3、在InterfaceDemo1类中调用该接口
结果为::
七、static关键字
1、通常来说,调用类时需要用到new关键字来创建此类的对象可可以获得,new实例化对象时数据存储空间才被分配,类中的方法才能被外界调用,但有两种情况用new无法解决:
只为某特定域分配单一存储空间,不管创建多少对象。
希望某个方法不与包含它的类的任何对象实例关联在一起。
2、被static修饰的变量和方法会随着类的加载而加载,优先于对象出现在内存中,不能引用this或super。
3、static关键字不能用于局部变量,只能作用于域。
4、static用法:
修饰变量
修饰方法
静态代码块
修饰类
5、静态不能调用非静态,非静态可以调用静态和非静态
6、调用static方法时,在不创建任何对象的前提下可以直接调用。
八、final关键字
1、用于修饰类、类属性、类方法。
2、被final修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖,被final修饰的变量只能被赋值一次。