接口
接口的特点:
1.接口的成员变量都是常量,必须要赋值,默认修饰符是public static final;不能声明实例成变量
2.接口中成员方法都是抽象的实例成员方法,默认修饰符public sbstract,不能声明为static
public interface Interface {
int ID=1;//等同于 public static final int ID=1;
void test();//public abstract void test();
}
public interface Interface2 {
void test1();
}
public interface Interface3 {
void test2();
}
子类继承父类,只能继承一个父类; 类可以实现多个接口,多个接口要用,分割
public class Test **implements Interface2,Interface3** {
@Override
public void test2() {
// TODO Auto-generated method stub
}
@Override
public void test1() {
// TODO Auto-generated method stub
}
}
接口可以继承接口
//接口可以继承接口
public interface TestIn1 extends Interface{
}
如果类没有实现接口的所有方法,这个类就要定义成抽象类
public abstract class TestImpl1 implements Interface{
}
如果一个类既要继承父类,又要实现接口,那先继承,后实现接口
public class TestImpl2 extends Person implements Interface1,Interfacd2{
...
}
接口中不能有构造方法,因为构造方法不是抽象的
接口的访问权限是public /缺省
问题:接口和抽象类很相似,好像接口能做的事用抽象类也能做,为什么还要用接口????
父类需要稳定的抽象方法,老是改动,这些子类以及子类的子类也会有影响
有时候需要给父类增加一些方法,不能直接从父类下手,可以新建接口,在接口上拓展方法,其他需要的子类自己去实现接口
//人的抽象类
public abstract class Person {
int age;
String name;
int sex;
public abstract void showInfo();
}
//厨师的接口
public interface Cooking {
void fry();
}
//唱歌的接口
public interface Sing {
void singing();
}
/**
* 这个是描述会唱歌的厨子是个老师
*/
public class SCTeacher extends Person implements Cooking,Sing{
String course;
@Override
public void singing() {
System.out.println(super.name+"会唱歌");
}
@Override
public void fry() {
System.out.println(super.name+"会烧菜");
}
//设置setInfo两种方法
//public void setInfo(int age,String name,int sex,String course ){
// super.name =name;
// super.sex=sex;
// super.age=age;
// this.course=course;
// }
public void setInfo(){
super.age=11;
super.name="王老吉";
super.sex=1;
this.course="语文";
}
@Override
public void showInfo() {
System.out.println("会唱歌的厨子的老师的信息是");
System.out.println(super.age);
System.out.println(super.name);
System.out.println(super.sex);
System.out.println(this.course);
}
public static void main(String[] args) {
SCTeacher s=new SCTeacher();
//s.setInfo(11, "王老吉", 1, "语文");
s.setInfo();
s.showInfo();
s.singing();
s.fry();
}
}
抽象类和接口的概括总结:
1.抽象类是对一类事物的高度抽象,其中既有属性也有方法;
2.接口是对方法的抽象,也是对一系列动作的抽象;
3.当需要对一类事物抽象的时候,应该就使用抽象类,好形成一个父类
当需要对一系列的动作抽象的时候,就需要使用接口,需要使用这些类的动作的类去实现相应的接口即可。