一、接口
接口是抽象方法和常量值的定义的集合
从本质上将,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
例:
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();
}
}
一个类可以实现多个无关的接口。多个无关的类也可以实现同一个接口。