1.接口的诞生:

             学过c,c++的应该知道C语言是面向过程的,C++是面向对象的,面向对象的一个特征:多态;(面向对象的语言都支持的三个概念:封装,继承,多态),C++实现多态的方法就是继承,C++支持一个类继承多个类,但对于Java语言其中有一个特点就是只能继承一个类,不能继承多个类,而为了解决这个问题,接口就产生了。因此,接口的一个特性就是一个类可以实现多个接口。


2.什么是接口:

             接口这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。(好比喻工作时间表,规定了你在某时刻应该干什么,类实现接口相当于,你在这时刻干了什么)

类实现接口使用:implements 接口的格式:

[public]interface 接口名称 [extends 父接口列表]
{
	[public ] [static][final] 数据类型 成员变量=常量;
	[public][abstract]返回值的数据类型 方法名(参数表);
}
2.1 接口的举例

public interface Cat {
	public static final int number=100;
	public abstract void run();
//	public default void print()
//	{
//		System.out.println("在接口中实现默认的方法");
//	}

}

3 接口的特性

  1. 接口和抽象类一样不能被实例化。cat=new Cat()//error 然而,接口不能构造接口的对象却能声明接口的变量。如Cat c。
  2. 接口中的变量时静态常量 如果写int number=100;默认的是public static final ;接口中的方法时抽象的方法,不写默认是public abstract。
  3. jdk8 接口可以实现默认的方法如
	public default void print()
{
	System.out.println("在接口中实现默认的方法");
}
  1. 接口可以继承多个接口(extends)如:
public interface Name extends Me,Me2{
	public static final int i=10;
	abstract public   void  add();
	}

5.实现接口的类必须要覆写接口中的全部抽象方法。 6.接口没有构造函数的


4 接口的实现

1 对于要实现接口的类,可以用implements 关键字来实现接口。 例子: interface1接口:

public interface Interface1 {
	public final static String name="interface1";
	public abstract void print1();
	public default void print()
	{
		System.out.println("interface1的实现默认方法");
	}

}

实现接口的类:

public class InterfaceImpl implements Interface1{

	@Override
	public void print1() {
		// TODO Auto-generated method stub
		System.out.println("impl interface1");
	}
	public static void main(String[] args) {
		InterfaceImpl impl=new InterfaceImpl();
		//重写接口的方法
		impl.print1();
		//接口的默认方法
		impl.print();
		//接口的名称
		System.out.println(Interface1.name);
	}
}

运行结果:

impl interface1
interface1的实现默认方法
interface1

2 接口的对象可以利用子类对象的向上转型进行实例化。(如果接口对象要调用子类自己的方法,必须强制类型转换。否则接口对象只能调用自己定义的方法在子类的实现。)

public class InterfaceImpl implements Interface1{
	
	public void add()
	{
		System.out.println("子类自己的方法");
	}

	@Override
	public void print1() {
		// TODO Auto-generated method stub
		System.out.println("impl interface1");
	}
	public static void main(String[] args) {
//		InterfaceImpl impl=new InterfaceImpl();
//		//重写接口的方法
//		impl.print1();
//		//接口的默认方法
//		impl.print();
//		//接口的名称
//		System.out.println(Interface1.name);
		Interface1 inter1=new InterfaceImpl();
		inter1.print();
		inter1.print1();
		System.out.println(Interface1.name);
		//inter1.add();//error
		((InterfaceImpl) inter1).add();
	}
}

结果:

interface1的实现默认方法
impl interface1
interface1
子类自己的方法

接口的继承

接口继承(extends): interface2 :

public interface Interface2 {
	public final static String name="interface2";
	public abstract void print2();
	public default void print()
	{
		System.out.println("interface2的实现默认方法");
	}

}

interface3:


public interface Interface3 {
	public final static String name="interface3";
	public abstract void print3();
	public default void print()
	{
		System.out.println("interface3的实现默认方法");
	}

}

interface1:

public interface Interface1 extends Interface2,Interface3{
	public final static String name="interface1";
	public abstract void print1();
	public default void print()
	{
		System.out.println("interface1的实现默认方法");
	}

}

实现interface1的类:

public class InterfaceImpl implements Interface1{
	
	public void add()
	{
		System.out.println("子类自己的方法");
	}

	@Override
	public void print1() {
		// TODO Auto-generated method stub
		System.out.println("impl interface1");
	}
	public static void main(String[] args) {
//		InterfaceImpl impl=new InterfaceImpl();
//		//重写接口的方法
//		impl.print1();
//		//接口的默认方法
//		impl.print();
//		//接口的名称
//		System.out.println(Interface1.name);
		Interface1 inter1=new InterfaceImpl();
		inter1.print();
		inter1.print1();
		System.out.println(Interface1.name);
		//inter1.add();//error
		((InterfaceImpl) inter1).add();
	}

	@Override
	public void print2() {
		// TODO Auto-generated method stub
		System.out.println("interface2");
	}

	@Override
	public void print3() {
		// TODO Auto-generated method stub
		System.out.println("interface3");
	}
}