接口是一种特殊形式的抽象类,可以理解为一个“纯”抽象类。
接口中所有的方法全部都是“抽象”的,这些方法只定义了方法名,参数,返回类型,
但没有方法体。
1.接口中的方法默认使用public abstract进行修饰
2.只有public , abstract,default,static可以修饰接口中的抽象方法
3.接口中不可以包含构造方法和静态方法。(1.8之后可以写静态方法)
4.接口中的成员变量默认使用static final进行修饰,即接口中没有成员变量只有常量。
5.一个类如果实现了接口,要么必须重写接口中的抽象方法,要么是一个抽象类。
6.一个类可以实现多个接口,在多个接口中间用“,”隔开。
将实现类对象声明为接口类型,并重写接口中的方法也是多态的一个体现
通过接口的多态后的对象,只能调用接口中定义的方法
实现类实现相应接口后可以直接区使用接口中的成员变量。
在其他类中使用接口中的静态方法时,直接通过接口名.方法名来调用。
实现类可以对接口中的默认(public default)方法进行重写
实现类中可以直接通过实现类对象,方法名()来调用接口中的default方法。
接口不能直接进行实例化,但是可以使用new关键字创建一个默认实现该接口的一个匿名实现类。
以上是知识点,下面又到了我们写实例的时候:
先定义一个名为:JavaProjectInterface的接口,
package myLearn;
public interface JavaProjectInterface {
public void writerJava();
public void sql();
public void writeJsp();
public void userSpring();
public void read();
}
在定义一个名为:InterfaceDemo的接口
package myLearn;
public interface InterfaceDemo {
int number=0;
public void run();
public static void test1() {
System.out.println("this is test");
}
public void eat();
public void read();
}
在定义一个父类 Person
package myLearn;
public class Person {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
String sex;
int age;
}
然后在定义一个Student子类,继承父类,实现上面两个接口
package myLearn;
public class Student extends Person implements InterfaceDemo,JavaProjectInterface{
String address;
String subject;
@Override
public void writerJava() {
// TODO Auto-generated method stub
System.out.println(name+"会写Java代码");
}
@Override
public void sql() {
// TODO Auto-generated method stub
System.out.println(name+"会sql");
}
@Override
public void writeJsp() {
// TODO Auto-generated method stub
System.out.println(name+"会writeJsp");
}
@Override
public void userSpring() {
// TODO Auto-generated method stub
System.out.println(name+"会userSpring框架");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(name+"会跑");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println(name+"会吃");
}
@Override
public void read() {
// TODO Auto-generated method stub
System.out.println(name+"会读书");
}
}
在测试类Test1中写出:
package myLearn;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu=new Student();
stu.setName("小明");
stu.writerJava();
stu.run();
stu.writeJsp();
stu.eat();
stu.read();
}
}