** 接口:
1、接口是一种引用数据类型。类和类之间叫做继承extends,类和接口之间叫做实现implements。
2、接口是完全抽象的(抽象类是半抽象),或者接口是特殊的抽象类。
3、接口的定义、语法:
-
【修饰符列表】 interface 接口名{ }
4、接口支持多继承,一个接口可以继承多个接口,一个类可以实现多个接口。
5、接口中只包含两部分内容,一部分是常量,一部分是抽象方法,就没有其他内容了。
6、接口中所有元素都是public修饰的。
7、接口中的抽象方法定义时:public abstract修饰符可以省略。
8、接口的方法都是抽象方法,没有方法体。
9、接口中常量中的public static final可以省略。
10、当一个非抽象类实现接口时,必须将接口中的所有抽象方法全部实现(覆盖、重写)。
*第一个代码示例:
public class JiekouTest01 {
public static void main(String [] args){
// new Mymath();//error,接口是抽象的,不能实例化
Mymath mm=new MyImpl();//MyImpl为非抽象类,可以实例化,可以用多态
int resulat1=mm.sub(6);
int resulat2=mm.sum(1,2);
System.out.println(resulat1);
System.out.println(resulat2);
}
}
interface JieKou1{
}
interface JieKou2{
}
//一个接口可以继承多个接口
interface CC extends JieKou1,JieKou2{
}
interface Mymath{
public abstract int sum(int a,int b);
int sub(int d);//public abstract可以省略
public static final double PI=3.1415926;//常量
double pi=3.1415926;//public static final可以省略
int sb=0;
}
class MyImpl implements Mymath{
//MyImpl类是非抽象类,需要重写/覆盖/实现接口Mymath中的方法
@Override
public int sum(int a, int b) {
return a+b;
}
@Override
public int sub(int d) {
return 0;
}
}
abstract class MM implements Mymath{//MM为抽象类,没问题,编译没问题
}
- 继承和实现都存在的情况下,extends关键字在前,implements关键字在后。
*第二个代码示例:
public class JiekouTest03 {
public static void main(String [] args){
Flyable f=new Cat1();
f.fly();
f.eat();
Flyable f1=new Pig();
f1.fly();
}
}
class Animal2{
public void eat(){
System.out.println("吃吃吃");
}
}
interface Flyable{
void fly();
void eat();
}
class Cat1 extends Animal2 implements Flyable{
@Override
public void fly() {
System.out.println("猫fly!");
}
}
class Pig extends Animal2 implements Flyable{
@Override
public void fly() {
System.out.println("天上掉下个猪八戒");
}
}
猫fly!
吃吃吃
天上掉下个猪八戒