JVAV学习笔记(二)—接口

JVAV学习笔记(二)—接口

abstract class AbsDemo
{
abstract void show1();
abstract void show1();
}

interface Inter
{
public static final int NUM = 4;
public abstract void show1();
public abstract void show1();
}

接口中的成员和class定义的不同之处:
接口中常见的成员有两种:
1.全局常量
2.抽象方法
而且都有固定的修饰符。共性:成员都是public修饰的。
接口的特点:
1.接口不可以实例化。
2.需要覆盖了接口中的所有的抽象方法的子类。才可以实例化。否则,该子类还是一个抽象类。
3.接口是用来被实现的。

接口的好处:
多继承可以让子类具备更多的功能
弊端:调用的不确定性
class Zi extend Fu1,Fu2
{}
Java中不直接支持多继承,而是对该机制进行改良。
通过接口来解决问题,将多继承转化为多实现。
interface InterA
{}
interface InterB
{}
class SubInter implements InterA,InterB
{}
一个类继承一个类的同时,还可以实现多个接口
class Zi extend Fu implements Inter
{}
Java中存在的多继承
interface A extends Inter1,Inter2
{}

问题:只需要部分功能,但是为了实例化,必须要全部实例化,好累!
回答:空实现,没有抽象方法的抽象类,方便创建接口的对象。
好厉害!

接口的思想:
1.扩展功能
2.暴漏出来的规则
3.降低了耦合性。解耦
接口的出现,一方在使用接口,另一方在实现接口

抽象类与接口
例子:
描述犬,里面有吃,叫,都是抽象的,具体由子类来完成
问题:定义成抽象类呢,还是接口呢
abstract class 犬
{
abstract void 吃();
abstract void 叫();
}
interface 犬
{
abstract void 吃();
abstract void 叫();
}
//添加一个功能。缉毒,单独描述一个功能犬
class 缉毒犬
{
void 吃(){}
void 叫(){}
void 缉毒(){}
}
缉毒犬是犬中的一种,is a关系。
犬用于描述所有犬的基本功能。用class定义。父类。犬不适合定义成接口。
class 缉毒猪
{
void 缉毒(){}
}
具备缉毒功能的有很多。缉毒功能需要抽取。抽取到类中,还是抽取到接口中?
不行,缉毒犬继承犬类,就不能继承其他类。因为类不能多继承。
Interface 缉毒
{
abstract void 缉毒();
}
class 缉毒犬 extends 犬 implements 缉毒
{}
这是可行的。


  • 类用于描述事物的共性的基本功能。
  • 接口用于定义事物的额外功能。

  • 抽象类中可以定义抽象和非抽象方法,子类中可以直接使用,或者覆盖使用。
  • 接口中定义都是抽象方法,必须实现才能用。

你可能感兴趣的:(java)