1.接口
概论:接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。java中的接口更多的体现在对行为的抽象。
2.接口的特点
package java_learn;
/*
定义一个接口JumpPing:
接口的特点:
1)接口用interface修饰,即public interface 接口名{};
2)类实现接口用implements表示,即:public class 类名 implements 接口名{};
3)接口不能实例化,接口如何实现实例化呢?参照多态的形式,通过实现类对象实例化,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态;
多态的前提:有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象。
4)接口的实现类:要么重写接口中的所有抽象方法;要么是抽象类。
*/
public interface JumpPing {//1)接口用interface修饰,即public interface 接口名{};
//定义一个抽象方法
public abstract void Jump();
}
package java_learn;
public class Cat implements JumpPing{//意思是类Cat实现接口JumpPing
//重写jump方法
//jump();快速重写方法快捷键
@Override
public void Jump(){
System.out.println("猫可以跳高!");
}
}
package java_learn;
public abstract class Dog implements JumpPing{//抽象类Dog在实现接口的时候可以不用重写接口中的方法,但是抽象类Dog的
// 子类在继承Dog的时候还是得重写接口中的抽象方法。
}
package java_learn;
/*
测试类!
*/
public class JumpPingDemo {
public static void main(String[] args) {
//JumpPing j=new JumpPing();//这样会报错!接口JumpPing是抽象的,而且主要对行为抽象,不能被实例化
JumpPing j=new Cat();//可以通过接口JumpPing的实现类Cat来实例化。
j.Jump();
}
}
3.接口的成员特点
package java_learn;
/*
接口的成员特点:
1)成员变量只能是常量,默认修饰符:public static final
2)构造方法:接口没有构造方法,这是因为接口主要对行为进行抽象,没有具体存在;
一个类如果没有父类,默认继承自Object类
3)成员方法:只能是抽象方法,默认修饰符:public abstract。
*/
public interface Inter {
public int num=10;
public final int num2=20;
public static final int num3=100;//接口中的成员变量是常量,并且还被静态修饰。直接写int num3=100;也可以的,会默认的。
// public void Inter(){}//会报错,接口中没有抽象方法。接口中的实现类InterImpl中可以写构造方法,
// 那如何解释实现类默认super()访问父类呢?:这是因为java中的所有构造方法默认访问Object类中的无参构造Object()。
//public void show(){}报错,接口中不能有非抽象方法
public abstract void method();//可以,接口中只能有抽象方法,也会默认为抽象方法
void show();//不报错,就是因为默认抽象方法
}
package java_learn;
//punlic class InterImpl extends Object implements Inter{}.这个是默认的,是对的,下面的是简写而已。
public class InterImpl implements Inter{//一般在接口名后面加Impl作为接口的实现类。
@Override
public void method() {
System.out.println("实现类必须重写接口中的抽象方法,比如method方法");//实现类必须重写接口中的抽象方法method
}
@Override
public void show() {
}
}
package java_learn;
/*
测试类
*/
public class InterfaceDemo {
public static void main(String[] args) {
Inter i =new InterImpl();//使用实现类InterImpl来实例化接口
// i.num=23;//报错,这是因为接口中的成员变量默认被final修饰,即接口中的成员变量默认我常量。
System.out.println(i.num);
//i.num2=40;//报错,这是因为num2被final修饰,成为了常量。
System.out.println(i.num2);
System.out.println(Inter.num);//事实上,可以通过接口直接访问接口中的成员变量
}
}
4.接口和类之间的关系
1)类和类之间的关系:继承关系,而且只能单继承。即在敲代码时,子类1 extends 父类1,父类2…就会报错。
2)类和接口直接的关系:实现关系,类可以继承于某个父类再继承多个接口。如public class Zi extends Fu implements Inter1,Inter2…不报错。
3)接口和接口的关系:继承关系,可以单继承,也可以多继承。