我们都知道对象是通过类来进行描述的,但是不是说所有的类都是用来描述对象的
一个类的类中没有足够的信息来描述一个具体的对象,这便是抽象类
抽象类的关键字:abstract
首先还是看看之前写过的类:
class Plant { String name; String source; String genus; public void trait() { System.out.println("父类方法"); } } class Tree extends Plant { @Override public void trait() { System.out.println("子类方法"); } }
既然trait方法是重写的方法,那么父类的trait根本就没有实现的必要,所以我们可以将其改成抽象方法
注意:抽象类可以没有抽象方法,但抽象方法必须在抽象类里面
abstract class Plant { String name; String source; String genus; public abstract void trait(); } class Tree extends Plant { @Override public void trait() { System.out.println("子类方法"); } }
1.抽象类是用于被继承的,所以无法实例化,除这点外它和普通的类没有区别
2.抽象类里面可以没有抽象方法,但抽象方法一定要在抽象类中
3.一个普通类继承抽象类,要重写抽象类里面所有的抽象方法
4.抽象类可以继承抽象类,此时不需要重写抽象方法
5.final无法修饰抽象类和抽象方法
6.抽象方法不能使用private和static修饰
可能会有人觉得奇怪:普通类也可以作为父类被继承,为什么还要再弄一个抽象类出来?
我们不妨假设一个场景:你在实例化对象的时候实例化了父类对象,如下:
public static void main(String[] args) { Plant tree=new Plant(); tree.trait(); }
如果父类是普通类的话,此时编译器不会报错,直接调用父类的方法
如果父类是抽象类,因为抽象类无法被实例化,所以编译器会直接报错,这样问题就能更早被发现
所谓接口就是公共的行为规范准则,比如说A4纸,A4纸的大小是210mm*297mm,那么你就只能按照这个规格来进行生产
在Java中接口就可以看成是多个类的公共规范,是一种引用类型数据
接口关键字:interface
接口同样有一些需要注意的事项:
1.接口也是用来被其它类实现的,同样不能实例化
2.接口里面的方法只能是抽象方法,默认是public static修饰
3.接口的成员变量默认是静态常量,所以必须初始化
4.接口被实现所使用的关键字为implements,类实现接口依旧要重写接口中所有的抽象方法
5.接口不能有构造方法和静态代码块
6.接口继承接口使用extends
7.创建接口时,接口的命名一般以大写的字母“I”开头(建议,非硬性要求)
8.接口也可以实现多态
接口在Java中最主要的作用就是实现多继承
Java中一个类只能继承一个父类,但它可以实现多个接口
抽象类和接口有相似的地方,不过二者之间最本质的区别就是抽象类可以有普通成员方法和普通成员变量,而接口中的方法只能是抽象方法
抽象类和接口介绍完毕,下一篇会介绍Java中一些比较重要的接口
以上是Java抽象类与接口实例分析的详细内容。更多信息请关注PHP中文网其他相关文章!