java中的接口
1.什么接口?
通过interface关键字创建出来的java元素就是接口
2.接口和抽象类的本质是一样
定义了一组可以由子类共享的一般形式,子类可以根据自己的实际情况去实现这个共享的一般形式。
3.接口的出现是为类克服java的单继承问题而引出来的。
package com.click369.test.demo1;
/**
* 接口
* @author Administrator
*/
public interface MyInterface {
}
4.一个java类可以实现多个接口【通过implements去实现接口】,如果有多个接口中间用”,”分隔
public class Student implements MyInterface,TestInterface{
}
5.接口中的变量都是用public static final 修饰的静态的常量元素,我们在接口中定义变量的时候通常都会省略public static final 修饰符。
public interface MyInterface {
//int testid=1001;
//static final int testid=1001;
//final int testid=1001;
public static final int testid=1001;
String testname="zhangsan";
}
6. 接口中定义的方法都是用public abstract 修饰的抽象方法,我们在接口中定义方法的时候可以省略public abstract 修饰符【jdk8.0开始可以为接口提供默认的实现方法】
public interface MyInterface {
void testMethod();
public abstract int testMthodInt();
}
7.当一个普通的java类实现一个/多个带有抽象方法的接口时,这个java类会有错误:
1.将这个普通的java类修改成抽象类
public abstract class Student implements MyInterface,TestInterface{
2.重复所有接口中的所有抽象方法【1.去掉abstract,2.增加方法体】
public class Student implements MyInterface,TestInterface{
public void method1() {
System.out.println("重写TestInterface接口中的method1抽象方法");
}
public double method2(double num) {
System.out.println("重写TestInterface接口中的method2抽象方法");
return 0;
}
public void testMethod() {
System.out.println("重写MyInterface接口中的testMethod抽象方法");
}
public int testMthodInt() {
System.out.println("重写MyInterface接口中的testMthodInt抽象方法");
return 0;
}
}
8.接口不能通过new关键字创建出接口对象。【使用接口回调对象充当接口对象】
接口回调对象与上转型对象十分相似
上转型对象--子类对象赋值给父类变量。
接口回调对象---实现该接口的子类对象父赋值给接口变量【接口回调对象】
package com.click369.test.demo1;
public class TestMain {
public static void main(String[] args) {
//接口不能通过new关键字创建出接口对象
//MyInterface mi=new MyInterface();
//使用接口回调对象充当接口对象
//接口回调对象---实现该接口的子类对象父赋值给接口变量
MyInterface mi=new Student();
//接口回调对象可以访问接口中的静态常量
System.out.println("testid=="+mi.testid);
System.out.println("testname=="+mi.testname);
//错误【接口中的变量都静态常量不能被修改】
//mi.testid=1002;
//mi.testname="lisi";
System.out.println("testid=="+MyInterface.testid);
System.out.println("testname=="+MyInterface.testname);
//通过接口回调对象访问接口中的抽象方法【被子类重写之后的抽象方法】
mi.testMethod();
mi.testMthodInt();
}
}
作业:抽象类与接口的区别?