java类、抽象类、接口详解

java类:

抽象类表示的是,这个对象是什么(事物的具体)。接口表示的是,这个对象能做什么(动作)

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

 

接口是做什么?  实现是怎么做?

抽象类:

抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)

抽象类和普通类的区别:

现在就可以清楚的发现:
(1)抽象类继承子类里面有明确的方法覆写要求,而普通类可以有选择性的来决定是否需要覆写;
(2)抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样;
(3)普通类对象可以直接实例化,但抽象类的对象必须经过向上转型之后才可以得到。

抽象类的使用限制:

(1)抽象类中有构造方法么?
由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。
并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

(2)抽象类可以用final声明么?
不能,因为抽象类必须有子类,而final定义的类不能有子类;

(3)抽象类能否使用static声明? 

外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。

4)可以直接调用抽象类中用static声明的方法么?
任何时候,如果要执行类中的static方法的时候,都可以在没有对象的情况下直接调用,对于抽象类也一样。

 

接口:

1、我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,
   但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。
    (接口类名 a = new 接口实现)
   (实际上就是使用了Java中多态的特性)
2.一个类可以实现不止一个接口。
3.一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。
4.一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。
5.接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。
6.接口用来弥补类无法实现多继承的局限、接口也可以用来实现解耦。
7.接口中只能使用public static final关键字(public修饰方法,static final修饰属性)

 

一、抽象类和接口在语法上的异同:

  相同点: 都不能直接实例化

 不同点:

     1、抽象类可是使用除final以外的所有关键字

     2、抽象类中中不一定都是抽象方法,可存在部分的方法体,而接口只有方法的抽象(默认是public修饰)

     3、每个类只能集成一个抽象类,但是却可是实现多个接口

https://blog.csdn.net/hanxueyu666/article/details/75712917

https://blog.csdn.net/weixin_41821522/article/details/106151178

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值