接口:硬件接口 两个设备之间的连接方式;;软件接口程序代码,特殊的类,表示一种规范,是具有N个方法的特征集合 再java中接口表示一种规范约束 要求实现者必须遵循的规范 多各类共同具有的特征
接口只定义了类应当遵循的规范 却不关心这些类内部的功能和实现细节 接口只定义了类里边必须提供的方法 从而分离的好处
面向接口编程:
接口和实现体体现了正真的多态
java中的接口 :
多各类的抽象类 是java中的一个特殊类 用于定义某一类事物必须具备的功能 要求该实现类必须提供该方法
定义类 【public】class 类名
定义接口 [public] interface 接口名
接口起名 :表示具有某些功能 有些习惯一Able结尾
接口中的成员:
1):接口中没有构造器,不能创建对象
2):接口中定义的变量实质是全局的静态常量默认public static final 来修饰
常量接口 :用接口来封装常量
标志接口 :接口中无成员 就一个标志 其他类实现该接口 就属于该家族 可以通过第三方代码赋予该接口实现类特殊的功能
3):接口中定义的方法都是公用的抽象方法 默认使用 public abstract 修饰
4):接口中的内部类默认public static修饰
我们使用的接口都包含了抽象方法
接口的特点:a接口无构造器 无法实例化 也不能显示定义构造器 b 接口只能继承接口 可以多继承
接口的实现者是实现类 仅仅只定义了某一些事物具有某些功能 但是没有任何实现我们需要提供类去实现接口 并且覆盖接口中的方法 从而实现接口定义的功能
语法 [修饰符] class 类名 extends 父类 implements 接口1 ,接口2;
接口和实现类之间关系加实现关系 再开发中有时候也叫继承关系
接口 变量= 创建实现类对象 // 体现多态
因为接口中的方法是抽象的 实现类中的覆盖必须使用 public 子类方法的权限必须大于父类方法 (覆盖的要求)
接口和抽象类的区别和相同点
相同点:
a 位于有继承顶端
b 都不能实例化
c 定义抽象方法
不同点:
1):接口声明 interface 继承 implements 抽象类 abstract
2):抽象类有构造器 接口无
3):一个类只能继承一个类 接口可以继承多个
4):接口定义的成员
面向接口编程:多态的好处:把实现类对象赋值给接口类型变量,从而屏蔽了不同实现类之间的实现差异
,可以做到通用编程
////////////////////////////////////////////////////////////////////////////////////接口
interface IWalkAble
{
void walk();//内部方法
interface A//内部类
{
}
}
interface Iwateranimal
{
void swim();
}
class cat implements IWalkAble
{
public void walk()
{
}
}
class Fish implements Iwateranimal
{
public void swim()
{
}
}
class Frog implements Iwateranimal,IWalkAble
{
public void swim()
{
}
public void walk()
{
}
}
interface Amphiable extends Iwateranimal,IWalkAble //接口多继承
{
}
//******************************举例面向接口编程
//接口
interface IUSB
{
void swapDate();
}
//鼠标
class Mouse implements Iusb
{
public void swapDate() //插入操作
{
}
}
//键盘
class KeyBord implements IUSB
{
public void swapDate()
{
}
}
//主板
class MotherBord
{
private usbs []=new IUSB[6];
private index=0;
//把设备插入到主板的功能
public void pluginIn(IUSB m)
{
usbs[index]=m;
index++;
}
public static void doWork()
{
for (IUSB u:usbs )
{
if(u!=null)
u.swapDate;
}
}
}
class InterfaceDemo
{
public static void main(String[] args)
{
/*System.out.println(“Hello World!”);
IWalkAble c=new cat();//体现多态
c.walk();*/
IUSB m=new Mouse();
IUSB K=new KeyBord();
MotherBord.pluginIn(m.swapDate());
MotherBord.pluginIn(k.swapDate());
}
}
////////////////////////////////////////////////////////////////////////////内部类
内部类 :定义再类内部的类 不允许其他类访问
根据使用不同修饰符 或者定义的位置不同分为:
1):实例内部类 没有使用static修饰
2):静态内部类:使用static修饰
3):局部内部类:再方法中定义的类
4):匿名内部类:适合只使用一次的内部类 属于局部类的特殊情况
内部类可以使用public 等 跟字段一样
实例内部类:没有static 修饰符 内部类属于外部类的对象
特点
匿名内部类
格式
new 父类构造器(实参列表)或者接口
{
}
例如 MotherBord.pluginIn(new IUSB()
{
public void swapDate()
{
Sestems.out.println(” “)
}
}
)