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