1、接口的理解
package com.example.demo.interfaceClass;
/**
* 1、我们前面用继承关系,描述了动物、哺乳动物、爬行动物的各种关系
* 2、现在我们要描述:飞机、公鸡、导弹、子弹、篮球、石头的关系?
*/
//进行一次抽象,它们都会飞
public interface Flyable {
int MAX_SPEED = 11000;
int MIN_HEIGHT = 1;
void fly();
}
//进行第二次抽象,导弹、子弹、石头可以攻击
interface Attack {
void attack();
}
/**
* 这就是接口的意义:进行了更加抽象的定义
*/
class Plane implements Flyable {
@Override
public void fly() {
System.out.println("飞机靠发动机起飞!");
}
}
class Man implements Flyable {
@Override
public void fly() {
System.out.println("跳起来,飞!");
}
}
/**
* 石头既要遵守Flyable的规范,也要遵守Attack的规范。
* 或者说石头既有Flyable的特性,也有Attack的特性。
*
* 类可以实现多个接口(注意不是继承)。
* 继承还不够抽象,必须依赖接口。
*/
class Stone implements Flyable, Attack {
int weight = 100;
@Override
public void fly() {
System.out.println("被人扔出去,飞!");
}
@Override
public void attack() {
System.out.println("石头扔出去攻击!");
}
}
测试类:
package com.example.demo.interfaceClass;
/**
* @Description 接口测试类
* @Auther gf.x
* @Date 2020/4/13 2:36
*/
public class Test {
public static void main(String[] args) {
Flyable f = new Stone(); //多态 父类引用指向子类对象
//f.weight //这里通过f获取不到Stone类的weight的属性
//如果非要获得Stone类的weight的属性的话,可以把f强转回Stone类型
}
}
2、接口的使用
接口:
package com.example.demo.interfaceClass;
public interface MyInterface {
//接口中只有:常量、抽象方法
//public static final 接口中定义常量时,写或不写默认都会加上
String MAX_GREAD = "boss";
int MAX_SPEED = 120;
//方法修饰符只支持public、abstract,这里不管加不加public abstract,默认都会加的
//不支持private修饰符
public void test();
public int test1(int a, int b);
}
实现类:
package com.example.demo.interfaceClass;
/**
* @Description 接口的理解和使用
* @Auther gf.x
* @Date 2020/4/13 1:24
*/
public class MyClass implements MyInterface {
@Override
public void test() {
//MyInterface.MAX_GREAD;
System.out.println("test!");
}
@Override
public int test1(int a, int b) {
System.out.println("test1!");
return a + b;
}
}
3、接口的多继承
package com.example.demo.interfaceClass;
/**
* 接口的多继承
*/
public interface InterfaceA {
void aaa();
}
interface InterfaceB {
void bbb();
}
//接口多继承
interface InterfaceC extends InterfaceA, InterfaceB {
void ccc();
}
class TestClass implements InterfaceC {
@Override
public void aaa() {
System.out.println("aaa!");
}
@Override
public void bbb() {
System.out.println("bbb");
}
@Override
public void ccc() {
System.out.println("ccc");
}
}