接口是一种公共的规范标准,只要符合规范标准,大家都可以通用。接口和抽象类相似,但是接口比抽象类的规定更加规范和严格。Java中的接口更多的体现在对行为的抽象!
抽象类的描述在 面向对象的特点10 中已经完成讲解,有问题的可以参考,以下链接!
抽象方法所在的类一定是抽象类,但是抽象类中可以有非抽象方法。
接口:接口中的方法均为抽象方法。
接口定义格式:接口用关键字interface修饰
接口的使用:public interface 接口名 {}
接口是不能创建对象,必须有实现类才能使用,类实现接口用implements表示
public class 类名 implements 接口名 {}
注意: 接口的实现类必须重写接口中的所有的抽象方法。
接口成员的特点:1.成员变量
只能是常量,默认修饰符:public static final,final修饰所以接口中定义的变量都是常量
2.成员方法
只能是抽象方法,默认修饰符:public abstract
3.构造方法
没有构造方法,因为接口主要是扩展功能的,而没有具体存在,接口中只有抽象方法。
public interface Inter {
//接口中定义的变量只能是常量
//默认修饰符:public static final,可以省略修饰符(public static final)
public int num1 = 10;
public final int num2 = 20;
public static final int num3 = 30;
int num4 = 40;//默认是被 public static final 修饰
//接口没有构造方法
// public Inter() {}
//接口中不能有方法主体
// public void show() {}
//默认修饰符:public abstract
public abstract void method1();
public void method2();
void show();
}
实现类:
/**
* 子类是具体类,要实现接口中所有的抽象方法
*/
public class InterImpl extends Object implements Inter {
public InterImpl(){
super();//super实现的是object这个超级父类
}
@Override
public void method1() {
System.out.println("实现类中的method1");
}
@Override
public void method2() {
System.out.println("实现类中的method2");
}
@Override
public void show() {
System.out.println("实现类中的show");
}
}
测试类:
public class Test {
public static void main(String[] args) {
//接口不能实例化
// Inter i = new Inter();
//通过多态的方法实
Inter i = new InterImpl();
//访问成员变量
System.out.println(i.num1);
//接口的常量是不能修改的
// i.num1 = 100;
i.method1();
i.method2();
i.show();
}
}
接口和抽象类的区别:
A:成员区别
抽象类:
成员变量:变量 或者 常量;
构造方法:有;
抽象类不能实例化;
成员方法:可以有抽象方法,也可以有非抽象方法。
接口:
成员变量:只可以静态常量 可以省略 static final;
构造方法:无;
接口不能实例化;
成员方法:只有抽象方法。 可以省略abstract!
B:关系区别
类与类
继承,单继承, 多层继承(爷->父->子->孙)
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承都可以
C:设计理念区别
抽象类【共性功能】。
接口【扩展功能】。
多实现的格式:(多继承也是一样的写法)
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【不重名时可选】
}
总结:
接口中只有常量和抽象方法;
接口是没有静态代码块和构造方法的;
一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
单继承多实现:
public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {
// 覆盖重写所有抽象方法
}
如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
欢迎关注微信公众号:小红的成长日记,一起学Java!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)