接口:跟类同级别,接口经常用来定义一些额外的功能和定义,接口中是用来定义一些拓展功能的,而且接口里面不能定义非抽象方法,只能定义抽象方法。
**interface关键字:**接口用interface关键字表示,可以和class类比,定义格式:interface 接口名{}
**implement关键字:**类实现接口用implement关键字表示,定义格式:implement 类名{}
接口的特点:
1.接口中的方法都是抽象方法,没有非抽象方法
2.方法的前面有默认修饰符
3.接口里面没有构造方法
4.接口的成员变量全是公共的静态常量,没有成员变量一说,因为前面存在默认修饰符
5.接口不能实例化,没有这么一说,我们可以按照按照多态的方式来实例化
接口和抽象类的区别:
接口没有构造方法,抽象类有构造方法
接口中只有构造方法,抽象类中即可以有抽象方法,也可以有非抽象方法
接口中只有公共的静态常量,抽象类中可以有成员变量和常量
我们建立接口这个概念的意义在于:对于一部分子类,他们可能没有经过继承父类,而拥有了一些自己后面才能实现的功能,例如同样是学生,但有的会Java语言,有的会C++。
我们可以通过下面这个程序来体会一下:
public abstract class Animal {
String name;
public abstract void sleep();
public abstract void eat();
}
class test{
public static void main(String[] args) {
Animal an=new TomCat();
an.name="汤姆";
System.out.println(an.name);
an.eat();
an.sleep();
Method me=new TomCat();
me.show();
System.out.println("--------------------");
Animal an1=new BlackCat();
an1.name="小黑";
System.out.println(an1.name);
an1.eat();
an1.sleep();
}
}
public class Cat extends Animal{
@Override
public void sleep() {
System.out.println("睡觉");
}
@Override
public void eat() {
System.out.println("吃鱼");
}
}
public class TomCat extends Cat implements Method{
@Override
public void show() {
System.out.println("会表演");
}
}
public class BlackCat extends Cat {
}
public interface Method {
void show();
}
汤姆
吃鱼
睡觉
会表演
--------------------
小黑
吃鱼
睡觉
我们都说接口中不能有非抽象方法
在JDK1.8之后,提供了默认用default修饰的方法,可以给出功能的具体实现,子类可以继承下去用
例如:
class A implements C{}
interface C{
public default void show(){
System.out.println("show方法");
}
}
class test1{
public static void main(String[] args) {
C c=new A();
c.show();
}
}
show方法
接口成员的特点:
成员变量:只能是静态常量,会有默认修饰符 public static final,但一般建议在编写程序时自己加上
构造方法:接口没有构造方法
成员方法:只能是抽象方法,会有默认修饰符public abstract,也是建议自己手动给出
类与类,类与接口,接口与接口的关系:
类与类 :单继承或者多层继承关系
类与接口:单实现或者多实现关系
接口和接口:单继承,也可以多继承。