欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象类 接口

程序员文章站 2022-05-28 23:32:41
...

抽象类

类是模具,有了类,就可以生产对象。
如果一个模具,计划有10个功能,但最终仍然有2个功能没有被实现,这个模具不能用于生产。
同理,类也有类似的现象,有3个方法,实现了2个, 有1个还没实现,但方法签名已经计划好了, 这个未实现的方法,必须用abstract来修饰,以通知系统本方法未实现,否则无法通过编译,该方法为抽象方法,拥有一个或者多个抽象方法的类,叫做抽象类。

抽象类是未完工的类,其不能用于生产实例!

抽象类 接口

抽象类可以被继承,而且渴望被继承 (愚公移山的故事)
子类继承父类,实现了父类的所有抽象方法,该子类可以脱掉抽象的帽子,成为普通类,也称可实例化类;否则,如果不实现父类抽象方法,则无论子类自身方法规模多么庞大,也无法忽视内部有一个抽象方法的事实,子类是不完整的,这个不完整是父类带来的,父类是子类的一部分,所以子类也还是抽象类,不能实例化。
抽象类语法识别注意点:
a.abstract void method3(){ }; //已经实现了,不能再说是抽象,这是矛盾的。
b.void method3( ) { }; // 请注意,空实现也是实现。
以上内容是抽象类的语法解释。下面讲解下抽象类的含义:
1) 被动抽象类
因为一个类的体内有抽象方法,该类不得不用抽象来修饰。
2)主动抽象类
一个类所有方法都实现了,是可实例化类,其故意主动地声明自己是抽象类。
一个类的作者为了不让使用者去创建这个类的实例,其故意申明此类为抽象类。
比如: Animal , Shape, ValueObject…..
该类作者认为这个类是一个抽象的概念,没有创建实例的意义,该类需要被继承,然后创建子类实例才有意义。
任何一个类,无论是否有抽象方法,都可以abstract来修饰。
(另外:不能用abstract来修饰已经用final修饰的类
Abstract类渴望被继承,而final拒绝继承,两者构成反义关系,不能同时存在,否则就构成了矛盾。)

接口

一个抽象类,所有的方法都是抽象的,所有方法的public,我们把这样的类叫做极度抽象类,是最干瘪的类。 一般写法为***able。

public abstract class A {
    public abstract void method1();
    public abstract void method2();
    public abstract void method3();
}
public interface A {
    void method1();
    void method2();
    void method3();
}

极度抽象类可以缩写为接口。那么,所有接口的方法都是public abstract,所有接口的属性均为常量(通过类名访问),无法再被修改。

类创建的过程:接口 (interface) -> abstract class -> 可实例化类
抽象类 接口
Java是单继承的语言,能够实现多个接口从某种程度上也弥补单继承带来的遗憾,有点多继承的感觉。

接口创建子类:
1.Extends
继承了接口,而得到结果还是接口。
一个类没有实现接口方法的计划,而是想继续增加接口方法,必须使用extends关键字来表示继承。
接口可以继承多个接口
2. implements
一个类如果有对接口方法做实现的计划,必须使用implements关键字来继承接口。 接口是一个特殊的类,一个类实现了接口,最终成为可实例化类,那么类必须包含接口中所定义的所有方法。
一个接口引用变量可以指向一个实现了这个接口的类对象,但只能调用这个对象中接口部分。
eg: Student stu=new Mary();
Stu只能调用Mary中实现接口的方法。

接口的用途:
抽象类 接口
java只有单继承,无法多继承,可以通过实现多个接口达到效果。

现实生活中,没有血缘的对象之间往往有共同的行为和动作,但每个对象的行为和动作的具体内容是不一样的,比如士兵, 每个士兵都是射击,擒拿格斗等行为,但有的人是神枪手,而有的老是不及格,那么也就是说大家都有这个动作,但动作的实现个人各自不同。 以上是现实生活中的具体情况,为了更好的模拟现实生活,语言必须演化,来满足这个要求,极度抽象类在语法层面上满足了这样要求,被重视起来,并最终得到了一个新的名字,接口。 接口在某种程度上与多态有同样的效果,能够写出可高度复用的代码。

举例:

   VideoCard vc=new Elsa();
 //VideoCard vc=new Colourful();
   vc.display();

这里vc 可以new Elsa(); 可以new Colourful(); 可以实现不同的功能。换句话来说,一会可以拿它当锤子使用,一会拿他当电锯使用,前提是他们实现了同样的接口。

相关标签: 对象