您的位置:首页 > 其它

抽象类和接口,从接触定义到二者区别(适合初学者)

2016-04-23 22:33 323 查看
1.抽象类与抽象方法

abstract关键字定义的类就是抽象类;abstract关键字定义的方法就是抽象方法(没有方法体),抽象方法本身没有任何意义,除非被重写。

如果A类中含有抽象方法,且想让此抽象方法有意义,那么就必须在继承A类之后,重写A类的抽象方法,所以A类必须被继承,只有这样抽象方法才有意义。

什么类必须被继承呢?这就是抽象类!

结论:若一个类中有抽象方法,那么此类必须是抽象类。

2.抽象类的定义与实现问题

定义:public abstract class A{}或者 abstract class A{}

抽象类不能直接创建对象,有两个方案可以去间接的创建对象。

第一种方案:用非抽象类B类去继承抽象类A,然后复写抽象类A中的所有抽象方法。(此时B类可以称为A类的实现类)

第二种方案:用匿名内部类的方式创建对象。

3.抽象方法的定义

抽象类必须在class前有abstract修饰,那么抽象方法怎么定义呢?

abstract void method_1();//即没有方法体,方法的返回值前必须有abstract

抽象类的方法修饰符:不能有private!

3.补脑:方法的修饰符

public 公有的

protected 包内、本类和子类,可以访问引用

default 包内和本类,可以访问引用

private本类访问,可以访问引用

4.抽象类中的方法,成员变量

抽象类中的方法可以有抽象方法,也可以有非抽象方法。这里,小妞要说,抽象类除了里面有抽象方法,并且不能直接实例化之外和非抽象类没有任何区别,所以成员变量的定义与非抽象类一样。

5.由抽象类引申到方法

抽象类:生物{ 抽象方法:吃、喝、工作}

生物的实现类:人extends 生物{复写所有抽象方法:吃、喝、工作}

写到这里,感觉这个程序的逻辑还是正确的吧!没关系,看下面:

生物的实现类:狗 extends 生物{复写所有抽象方法:吃、喝、工作}

现在是不是感觉很奇怪?狗竟然还工作?!世界都疯狂了,狗也迫于生活压力了?可怜的程序狗!

此时,会想,定义两个抽象类,

其中A类{抽象方法:吃、喝},B类{抽象方法:工作}

那么,人就要继承两个类A、B!这时又错了,Java不支持多继承!这时,接口就出现了。

A类{抽象方法:吃、喝},B接口{方法:工作}

此时,人继承A类,实现B接口就可以了,到这,接口终于出生了。

6.接口

用interface定义,可以看成是纯粹的抽象类,因为接口中所有的方法,都是抽象方法。

写成interface InterfaceA {}或者public interface InterfaceA {}

7. 接口中的方法的定义

方法默认都是public、abstract类型的。

不嫌累的话,当然可以手动添加。。。

还可以手动只添加public或者abstract,但是其他的方

修饰符均不能手动添加!

8.接口中的成员变量的定义

默认都是public、static、final类型的。

还可以手动添加public或者 static或者final或者三者的任意组合。

9. 接口的实现问题

接口不能直接创建对象,有两个方案可以去间接的创建对象。

第一种方案:用非抽象类B类去继承接口A,然后复写接口A中的所有抽象方法。(此时B类可以称为A接口的实现类)

第二种方案:用匿名内部类的方式创建对象。

总结:

接口与抽象类相同点:

1) 定义时public abstract class A{}或者 abstract class A{}

public interface InterfaceA {}或者interface InterfaceA {}

2) 实现都是两种方式

接口与抽象类不同点:

1) 常量定义时:

接口默认都是public、static、final类型的。

抽象类和非抽象类一样。

2) 方法定义时:

接口中方法默认都是public、abstract类型的。

抽象类中的抽象方法有abstract即可,另外不能使用private,其他权限修饰符均可根据需要使用;还可以实现一部分方法。

3) 一个类可以继承一个抽象类,却可以实现多个接口。

接口可以继承接口,并且可以继承不只一个接口,但是不能实现接口。

抽象类可以继承别的抽象类,那么可以不覆盖抽象方法。

以上是小妞的总结,几乎每一句话都是试验过的,虽说讲不清为啥这么写是对的,但是可以让初学者或者懒于总结的人得个省事,有错误的地方希望好心人的指正呀!小妞的第一篇博客。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  接口 抽象类 初学者