java 接口
一、接口
接口是抽象方法和常量值的定义的集合
从本质上将,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
例:
public interface runner{ public static final int id = 1; public void start(); public void run(); public void stop(); }
java是只支持单继承的,但现实之中存在于多重继承这种现象。因此可以借助接口帮助我们实现多重继承。
抽象类所具有的一些东西接口可以有,加入一个抽象类里面所有的方法都是抽象的,没有任何一个方法需要这种抽象类去实现,并且这个抽象类里面所有的变量都是静态(static)变量,都是不鞥改变(final)的变量,这时可以把这样的抽象类定义为一个借口(interface)。把一个类定义为一个借口的格式是把声明类的关键字class用声明借口的关键字interface替换掉。
public interface JavaInterface{
}
对于多继承来说,在一个子类对象里面实际上包含有多个父类对象,而对于但继承来书哦,子类对象里面只有一个父类对象。多继承子类对象就有多个父类对象,而这些父类对象之间可能游湖存在有重复的成员变量,这就非常容易出现问题,因此在java里面避免了这种问题的出现,采用了接口这种方式来实现多继承。作为接口来说,一个类可以从接口继承(或者叫接口实现),这也是多继承,接口里面的成员变量不专属于某个对象,都是惊天的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也即是实现多重继承,而且又避免了多重继承容易出现的问题,这就是用接口实现多重继承的好处。
二、接口特性
1、接口可以多重实现
2、接口中欧声明的属性默认为public static final的;也只能是public static final
3、接口中只能定义抽象方法,而且这些方法默认为public,也只能是public的,
4、接口可以继承其他的接口,并添加新的额属性和抽象方法。
package com.lost.interface1; interface Painter { public void eat(); public void paint(); } interface Singer { public void sing(); public void sleep(); } class Student implements Singer { private String name; public Student(String name) { this.name = name; } public String getName() { return this.name; } public void sing() { System.out.println("Stduent is singing"); } public void sleep() { System.out.println("Student is sleeping"); } public void study() { System.out.println("Studying........."); } } class Teacher implements Singer,Painter { String name; public Teacher(String name) { // TODO Auto-generated constructor stub this.name = name; } @Override public void eat() { // TODO Auto-generated method stub System.out.println("teacher is eating"); } @Override public void paint() { // TODO Auto-generated method stub System.out.println("teacher is painting"); } @Override public void sing() { // TODO Auto-generated method stub System.out.println("teacher is singing"); } @Override public void sleep() { // TODO Auto-generated method stub System.out.println("teacher is sleeping"); } public String getName() { return this.name; } public void setName(String name) { this.name = name; } } public class TestInterfaces { public static void main(String[] arg) { Singer s1 = new Student("le"); s1.sing(); s1.sleep(); Singer s2 = new Teacher("steven"); s2.sing(); s2.sleep(); Painter p1 = (Painter)s2; p1.paint(); p1.eat(); } }
一个类可以实现多个无关的接口。多个无关的类也可以实现同一个接口。