一上来先把知识点摆上,这章可能有点抽象,希望你们多理解,多看书,如果我这里写的哪里有你看太懂的,欢迎留言评论,我都会回复的。
因为今天很多都是理论知识,在没有多敲代码的情况下,很多东西都费解,但是等你有了不少代码量后,看这些理论就会很快就能理解,原来如此。
接口与抽象类
在昨天的继承中,我们最高级的父类是animal如下图
但是之前说过,父类越抽象,那么animal是什么东西?可能这里你会说动物,但是这里我们只是举例,可能还有更高级更抽象的类,抽象到我们都不知道怎么形容.
第一个要点 这时候我们不想某个类被初始化的话,通过abstact关键词标记为抽象类
上面的Canine类就是个抽象类,这样这个类就不可以被初始化了。
第二个要点 抽象类能支持抽象方法和非抽象方法
第三个要点 如果带有抽象方法的类 一定是抽象类
第四个要点 抽象的方法没有内容 它的声明是以分号结束。
因为方法都抽象了,你肯定不知道他具体做什么,所以肯定没有方法体。
第五个要点 抽象的方法必须在具体的类中运行。
第五点 抽象的方法必须在具体的类中运行
上面两张图中做了说明
在java中,本着万物皆对象的想法,所以有个object他是所有类的父类
第六点 Java所有的类都是Object {java.lang.object} 直接或间接的子类.
第七点 方法可以声明object的参数或返回类型,如下图的方法和log
第八点 不管实际上所引用的对象是什么类型, 只有在引用变量的类型就是带有某方法的类型时才能调用该方法
o只能调用object的方法,而不能调用dog的方法。
第九点 Object引用变量在没有类型转换的悄况下不能赋值给其他的突型,若堆上的对象类型与所要转换的类型也不兼容则此转换会在执行间产生异常 .
第十点 从 ArrayLìsl<ObJect>取出的对象只能被Object引用。不然就要用类型转换来改变
如果要转换的话 如上图的操作进行转换。
第十一点 Java不允许多继承 因为这样会有致命方块的问题.
就是不知道你到底引用的是哪个父类的方法,所以父类只能继承一个,接口却可以实现多个
第十二点 接口就好像是 100%纯天然抽象类 .
书中说的animal 有6个具体的子类,而dog 和 cat 两个类想实现宠物现象的几个方法,这个怎么办呢?
看上面的几个方法 弊端都很大,第一跟第二个耦合度都很高,不利于维护,第三点的话就是不是面向对象编程,而且也不利于维护。
这个时候我们学到了一个新的知识点:接口
它是抽象的,举个例子,有个吃饭(eat)的接口。只有学生啊 老师啊,欧洲人,几个类需要实现这个接口,接口中,我们有带餐具的属性,那具体带筷子带刀叉,就得根据具体类中实现。
所以接口是抽象的,被称为百分百的抽象类。
第十三点 接口的声明
第十四点 接口的实现
第十五点 类可以实现多个接口
这种设计就十分解耦!
第十六点 实现某接口的类也须实现它所有的方法 因为这些方法都是 public 与 abstract的。
第十七点.要从子类调用父类的方法可以用 super这个个关键词来引用 .
例如 super.RunReport( );
总结下 知识点 抽象类 接口 类型转换 抽象方法 object