面向对象编程----接口详解
接口 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
}
}
本文来自博客园,作者:神奇的梦,转载请注明原文链接:https://www.cnblogs.com/fantasticDream/p/16348064.html
浙公网安备 33010602011771号