fantasticDream

面向对象编程----接口详解

接口 interface 或者叫界面

我们前面用继承关系,描述了动物、哺乳动物、爬行动物的各种关系。

 现在我们要描述:

--飞机  导弹  子弹  篮球 石头的关系?

为什么需要接口?接口和抽象类的区别?

--接口就是比“抽象类”还“抽象”的“抽象类”可以更加规范的对子类进行约束全面地专业地实现了:规范和具体实现的分离

--接口就是规范,定义的是一组规范体现了现实世界中“如果你是。。。则必须能。。。”的思想。

如果你是天使,则必须能飞,如果你是汽车,则必须能跑,如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。

--接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。

--项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的“不变”就是“规范”。因此,我们开发项目往往都是面向接口编程!

 

如何定义接口

--格式:

[访问修饰符] interface 接口名 [extends 父接口1,父接口2]{

--常量定义   //总是 public static final

--方法定义   //总是 public abstract

}

 

--子类通过implements来实现接口中的规范

--接口不能创建实例但是可用于声明引用变量类型

--一个类实现了接口必须实现接口中所有的方法并且这些方法只能是public的。

--接口支持多继承

 

package cn.bjsxt.oop.testInterface;
/**
* 测试接口
* 用继承不能来定义的东西,可以用来定义更加抽象关系 用接口来定义 如:飞机、战斗机、石头、无人机、子弹
* @author 神奇的梦
*
*/
//建文件的时候也可以用new interface来创建
//这里就不能用class要用interface
//编译的时候还是java文件,编译的时候也是class文件

 

//它的意义就在于:设计和实现分离,就是来让你实现的
public interface MyInterface1 {
// 接口里面有什么:
// 只有常量和抽象方法。
// public static final 接口中常量定义时,写或不写都是这样
public static final String MAX_GREAD ="BOSS";
int MAX_SPEED =120;
// private不被允许 接口里面必须是公开的
// abstract 抽象 这里必须是公开的 它是规范
// 总是 public abstract
public void test01();
// 写一个方法text02 ,返回一个int
public int test02(int a,int b);
}

 

 

package cn.bjsxt.oop.testInterface;
// implements 实现
public class MyClass implements MyInterface1 {
@Override
public void test01() {
// 类似于变量的东西
// MyInterface1.MAX_GREAD;
System.out.println(MyInterface1.MAX_GREAD);
System.out.println("test01");
}
@Override
public int test02(int a, int b) {
return 0;
}
}

package cn.bjsxt.oop.testInterface;

public interface Flyable {
// 最高速度不能超过11000米/每秒,超了就编程卫星了
int MAX_SPEED=11000;
// 最低高度不能超过1米,超了1米叫飞,不超1米叫跳
int MIN_HEIGHT = 1;
// 没加public 默认加了public abstract
void fly();
}
//接口可以定义多个
interface Attack{
void attack();
}
class Plane implements Flyable{
@Override
public void fly() {
System.out.println("跳起来,飞!");
}
}
//接口可以定义多个 接口意味着规范
class Storn implements Flyable,Attack{
int weight;
@Override
public void fly() {
System.out.println("扔出去,飞!");
}
@Override
public void attack() {
System.out.println("石头攻击!");
}
}
class Man implements Flyable{
public void fly() {
System.out.println("跳起来,飞!");
}
}

package cn.bjsxt.oop.testInterface;

public class Test {
public static void main(String[] args) {
// 无法实例化接口的类型
// Flyable f=new Flyable();
// 因为它是Flyable所以它只认识Flyable以及接口内的几个变量
Flyable f=new Man();
// f指向Man里面的fly()方法;
f.fly();

MyInterface1 m=new MyClass();
m.test01();

}
}

package cn.bjsxt.oop.testInterface;
/**
* 创建接口 interface
* @author 神奇的梦
* 接口支持多继承
* 多继承会引入复杂性
* 因为接口已经足够简单了
*/
public interface InterfaceA {
void aaa();
}
interface InterfaceB{
void bbb();
}
interface InterfaceC extends InterfaceA,InterfaceB{
void cccc();
}
class TestClass implements InterfaceC{
@Override
public void aaa() {
// TODO Auto-generated method stub
}
@Override
public void bbb() {
// TODO Auto-generated method stub
}
@Override
public void cccc() {
// TODO Auto-generated method stub
}
}

 

posted on 2022-06-06 14:15  神奇的梦  阅读(151)  评论(0)    收藏  举报

导航