1.什么是接口
    接口---使用interface关键字创建的java元素
    例如:public interface  接口名称{}
               interface  接口名称{}

2.为什么要使用接口
    1.接口为不同种类的事物提供功能,让它的子类根据自身的实际情况实现这个功能。
       接口---[收费功能]
       坐车---实现接口--重写收费功能
       看电影---实现接口--重写收费功能
       坐车和看电影不是同一种类的事物
    2.一个java类只能继承一个父类【单继承】,接口可以实现多个,可以克服类的单继承带来的问
题。

3.接口如何实现
    通过implements关键字类实现一个或多个接口,如果有多个“,”分开。
    格式:public  class  类   implements   接口名1,接口名2...{}

4.接口中可以有哪些元素
   接口中的变量都是使用public static final修饰的静态常量,public static final可以省略。
   接口中的抽象方法都是使用public abstract修饰的抽象方法,public abstract可以省略。
   接口中可以有静态方法。 

package zx.javatest.c;
//接口--使用interface关键字创建的java元素
public interface Interface {
	//静态常量
	//接口中的变量都是使用public static final修饰的静态常量,
	//public static final可以省略
	public static final String  bianliang1="静态成员常量1";//常量
	public static String  bianliang2="静态成员常量2";
	public String  bianliang3="静态成员常量3";
	String  bianliang4="静态成员常量4";
	//不能有构造方法
	//public  MyInterface(){}
	//不能有实例方法
	//public  void shiliMethod(){}
	//只有静态方法
    public static  void staticMethod(){
    	System.out.println("接口中的静态方法");
//    	bianliang1="ewfea";
    }
    //抽象方法
    //接口中的抽象方法都是使用public abstract修饰的抽象方法,
    //public abstract可以省略
//    public abstract void abstractMethod1();
//    public  void abstractMethod2();
    void abstractMethod3();
}

5.接口的具体用法
    1.接口不能通过new的形式创建对象的,可以通过这个接口的子类来创建接口对象
    2.接口中可以有抽象方法,可以一个抽象方法都没有
    3.当一个普通的java类实现接口,就需要实现接口提供的所有抽象方法,也可以将这个普通的           java类改成抽象类
    4.接口可以继承接口,而且是全部继承父接口中的所有元素。
    5.当某一个普通的java类中的方法参数是接口类型的时候,可以传递接口回调对象,也可以是接         口的子类对象。

6.什么是接口回调对象及其基本特征
    接口回调对象与上转型对象相似。
    上转型对象---子类对象赋值给父类变量
    接口回调对象---接口的子类对象赋值给接口变量

    基本特征:接口回调对象不能访问使用子类自己定义的变量和方法,只能访问接口提供的变量和方法,当访问接口中的抽象方法时,实际上访问的是被子类重写的抽象方法。
 

package zx.javatest.c;
//接口--使用interface关键字创建的java元素
public interface Interface {
	//静态常量
	//接口中的变量都是使用public static final修饰的静态常量,
	//public static final可以省略
	public static final String  bianliang1="静态成员常量1";//常量
	public static String  bianliang2="静态成员常量2";
	public String  bianliang3="静态成员常量3";
	String  bianliang4="静态成员常量4";
	//不能有构造方法
	//public  MyInterface(){}
	//不能有实例方法
	//public  void shiliMethod(){}
	//只有静态方法
    public static  void staticMethod(){
    	System.out.println("接口中的静态方法");
//    	bianliang1="ewfea";
    }
    //抽象方法
    //接口中的抽象方法都是使用public abstract修饰的抽象方法,
    //public abstract可以省略
//    public abstract void abstractMethod1();
//    public  void abstractMethod2();
    void abstractMethod3();
}
package zx.javatest.c;

public class Testm {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		Interface.bianliang1="不能修改";
//		System.out.println(Interface.bianliang1);
		
		//接口回调对象
//		Test5.test1(my);
		
		Interface in1 = new Test1();
//		in1.test1();		
		in1.abstractMethod3();
		
		Test5.test1(in1);
		
		Test1 t1= new Test1();
		Test5.test1(t1);
		

	}

}
package zx.javatest.c;
//接口子类
//public abstract class  Test1 implements Interface{
public  class  Test1 implements Interface{

	public void abstractMethod3() {
		// TODO Auto-generated method stub
		System.out.println("接口子类重写接口的抽象方法");
		
	}
	public void test1(){
		System.out.println("子类自己的方法");
	}
}
package zx.javatest.c;

public class Test5 {
	public static void test1(Interface my){
		System.out.println("普通类中的静态方法");
	}
}