Java面向对象四大特性之抽象

声明一个抽象类:abstract class 类名 ;

抽象类中必须包含一个抽象方法,抽象方法只有声明部分,没有实现方法,即没有方法体部分,如abstract 方法名() ;

抽象类和普通类的差别如下:

1、抽象类比普通类的定义中多出一个抽象方法,普通类的所有定义(变量,常量,方法)在抽象类中都能使用;
2、在类的声明处需要用abstract声明为抽象类,抽象方法也必须用abstract来声明。
抽象类本身不能被直接实例化,即不能用new实例化对象,能否有构造方法呢?答案是可以的。
含有抽象方法的类必须被声明为抽象类,必须有子类,抽象类的子类(如果是普通类)必须复写所有的抽象方法,抽象类的子类若是抽象类,可以不复写所有的抽象方法。
抽象类和接口的理解:

抽象
1.使用abstract 关键字;
2.可以修饰方法,类;
3.被abstract修饰的方法叫做抽象方法.该方法是没有方法体的.
4.抽象方法只能在抽象类中
5.含有抽象方法的是抽象类,但是抽象类不是一定要有抽象方法.
6.抽象类中有抽象方法也可以有实例方法
7.abstract 和static 不可以一起使用.
8.抽象意味这继承
9.抽象类不可以直接实例化

接口
接口是一种比抽象类更加抽象的"类"
(这里为什么会用类,但是加了引用,是因为接口本身不直接是类,在底层编译时会由JVM转换成抽象类)
但是要明确:接口本身就不是类.
接口是用来定义类和之间的协议,它所提供的是一种形式而没有具体实现.
(接口中在jdk8之前是没有方法体的jdk8可以使用default关键字修饰方法)
同时如果有类实现了接口那么必须实现接口中没有实现方法.实现通过关键字implements
interface. --外貌他的实现类代表如何工作.

接口中需要注意的问题:

1.接口中的方法默认访问权限都是public.确切来说只能是public.因为接口是对外
2.接口中的变量默认都是public static final 的也就是都是常量.常量的变量名必须大写.因为是static所以接口中的常量可以直接通过InterfaceName.变量
3.在8之前接口中没有方法体.8之后如果想在接口中使用方法体必须使用default关键字
4.实现接口的非抽象类必须实现接口中全部只有声明的方法
5.实现接口的如果是抽象类可以选择不重写任何方法直接继续抽象下去
6.不能通过new关键字直接实例化接口.
7.实现多接口时比如:A.impB,C,D 那么BCD中不要存在同名方法.
8.都说Java单继承多实现.如果是接口可以多继承但是接口不可以实现接口哪怕有了default

接口与抽象类的区别:

1.从语法层次说
1.1接口的语法是interface而抽象类的语法是abstract class
1.2抽象方法中可以接受任意访问类型,接口中只能是public
1.3抽象类中可以有常量可以有变量,接口中只能有常量
1.4在不使用default接口中所有方法没有方法体,抽象类中即可以有方法声明也可以有方法体
从语法角度来说可以理解接口是特殊的抽象类. 

2.从设计层次说
2.1 抽象层次不同. 抽象类是对类的抽象,接口是对行为的抽象.抽象类是对整个类进行抽象.接口是对类局部(行为)进行抽象
2.2 跨域不同.抽象类是为了继承,抽象类的跨域是具有相似特征的,而接口是跨不同的.
接口和实现类并不要求在本质上是一样的.仅仅只是实现了接口的契约而已.抽象了是为了继承继承要满足is-a 从根本上来说父类和子类的本质是一样的.
2.3 设计层次不同.对于抽象类来说是自下来上的设计.因为我们要知道众多子类的行为和特征才可以抽取组成抽象类.
然而接口定义规则可以在不知道子类的情况下,先定义一个规则.所以接口是从上往下设计的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值