接口(interface)可以实现多重继承的效果
(几个类共同派生出一个子类,该子类继承了所有父类的属性和方法)
接口是抽象方法和常量值的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有常量和方法的实现,一个类可以实现多个接口,接口也可以继承其他接口;
接口的特点:
接口用interface定义,所有成员变量默认由public static final修饰,所有方法默认用public abstract修饰,接口没有构造器,采用多层继承机制;
一个类可以继承多个接口:
public interface Testin {
int ID = 1;//等同于public static final int ID = 1;
void test();//等同于public abstract
}
public interface Testin1 {
void test1();
}
public class TestInmpl implements Testin,Testin1 {
@Override
public void test() {
}
@Override
public void test1() {
}
}
接口可以继承接口:
public interface Testin2 extends Testin,Testin1{
}
实现接口的类中必须提供接口中所有方法的具体实现内容,才可以实例化这个类,否则这个类是一个抽象类;
如果一个类既要继承父类,也要实现接口,要按照先继承后实现的顺序。
为什么要引入接口呢?引入接口的目的就是如果我们想在父类中添加一些方法,但是父类已经有了很多子类,盲目的修改父类会带来很多的麻烦,这时我们可以定义一个接口,让将需要增加的方法写进接口,然后让需要增加方法的子类去实现这个接口,避免盲目扩充父类造成不必要的影响。
public interface Cooking {
void fry();
}
public interface Sing {
void sing();
}
这是两个接口,分别有一个抽象方法。
public abstract class Person1 {
String name;
int age;
String sex;
public abstract void Info();
}
这是一个抽象类,抽象类是对于一类事物的抽象,其中既有属性也有方法;接口是对方法的抽象,也就是对一系列动作的抽象。
class Teacher extends Person1 implements Cooking,Sing{
//继承了抽象类Person1,实现了接口Cooking和Sing
String course;
public void setInfo(){
super.name = "张三";
super.age = 22;
super.sex = "男";
this.course = "语文";
}
//重写了两个接口中的抽象方法
@Override
public void sing() {
System.out.println("会唱歌");
}
@Override
public void fry() {
System.out.println("会炒菜");
}
//重写抽象类中的抽象方法
@Override
public void Info() {
System.out.println("这是一个会唱歌又会炒菜的老师,下面是老师的信息");
System.out.println("姓名:"+super.name);
System.out.println("年龄:"+super.age);
System.out.println("性别:"+super.sex);
System.out.println("课程:"+this.course);
}
}
Teacher t = new Teacher();//测试
t.sing();
t.fry();
t.setInfo();
t.Info();
可以使用接口接收引用对象(相当于父类),Cooking c = new Teacher();创建的引用对象c已经转换为Cooking类型,只能调用Cooking中的方法,体现了对象的多态性;