一.
之前讲述了抽象类,里面既可以定义抽象方法,也可以定义非抽象方法。
现在我们要讲的是一种特殊情况。下面是举的例子,内容就是两个抽象方法,可以说由于类中有了抽象方法,所以类就成了抽象类?
上面这个类,我们可以用另外一种方式定义,也就是说当一个抽象类中的方法全都抽象的时候,(这是为了引出接口的由来)
(当四条边都相等时,就不叫长方形,而是叫正方形。)
这仅仅是为了引出接口,它在表现上确实是这样,但实际上它俩有很严重的不同。
二.
接口该如何定义。
(至少接口在定义的时候,比抽象类书写要简便一些,interface Demo和abstract class Demo的区别)
这就叫做定义接口,和定义类是一样的。到这可以明确一点的是,接口中的方法都是抽象的。(接口的定义形式)
虽然它不是class关键字定义的类,但是编译完还是class类文件。因为java都是以class文件来封装的字节码数据的。
interface仅仅是换了一种表现形式。
接口的描述基本介绍完了,里面除了抽象方法以外,里面还能定义一种东西,就是全局常量。
其实除了上面两个之外,还有其他的东西,但是不常见。
凭什么说是全局常量,就是由于修饰符决定的,public static final。
抽象方法的修饰符也是固定的,public abstract。
因此,定义接口的时候,可以这么定义,
接口得这么定义内容,必须的。
看上面的截图,可以得出下面的结论。(权限都是最大的)
接口中修饰符非常多,非常麻烦,一不小心,比如说漏写了一个修饰符。
DOS编译没有问题。
再漏写一个static,编译也没问题。
注意:要是忘写了,系统会帮你加上。这些成员都是固定修饰符,什么是固定?只要前面写的是interface,它里面就全都是固定的,即使向下面那样的int NUM=4,也会将前面的加上。
由于固有形式的规定,最终接口可以写成下面的形式。虽然这么写可以,是简化了,但是阅读性很差。
带来两个问题,对于这里的NUM,如果前面不加修饰的话,很可能就以为它就是个变量,(实际是个常量),你不知道它居然可以通过接口型调用,(它是static修饰,必然可以是通过类名调用)。讲完属性,讲行为。大家都知道show1();是抽象方法,没写关键字怎么看出来的,尾部是(); 这样的,就是抽象的。那么抽象方法可以被覆盖,这种情况很有可能覆盖错(show1();)。原因是,它的权限是public,而且不写的话,如果你用非public覆盖,会导致失败,覆盖一定要权限足够大。所以大家都要记得,修饰符都要带着。
---恢复内容结束---
一.
之前讲述了抽象类,里面既可以定义抽象方法,也可以定义非抽象方法。
现在我们要讲的是一种特殊情况。下面是举的例子,内容就是两个抽象方法,可以说由于类中有了抽象方法,所以类就成了抽象类?
上面这个类,我们可以用另外一种方式定义,也就是说当一个抽象类中的方法全都抽象的时候,(这是为了引出接口的由来)
(当四条边都相等时,就不叫长方形,而是叫正方形。)
这仅仅是为了引出接口,它在表现上确实是这样,但实际上它俩有很严重的不同。
二.
接口该如何定义。
这就叫做定义接口,和定义类是一样的。到这可以明确一点的是,接口中的方法都是抽象的。(接口的定义形式)
虽然它不是class关键字定义的类,但是编译完还是class类文件。因为java都是以class文件来封装的字节码数据的。
interface仅仅是换了一种表现形式。
接口的描述基本介绍完了,里面除了抽象方法以外,里面还能定义一种东西,就是全局常量。
其实除了上面两个之外,还有其他的东西,但是不常见。
凭什么说是全局常量,就是由于修饰符决定的,public static final。
抽象方法的修饰符也是固定的,public abstract。
因此,定义接口的时候,可以这么定义,
接口得这么定义内容,必须的。
看上面的截图,可以得出下面的结论。(权限都是最大的)
接口中修饰符非常多,非常麻烦,一不小心,比如说漏写了一个修饰符。
DOS编译没有问题。
再漏写一个static,编译也没问题。
注意:要是忘写了,系统会帮你加上。这些成员都是固定修饰符,什么是固定?只要前面写的是interface,它里面就全都是固定的,即使向下面那样的int NUM=4,也会将前面的加上。
由于固有形式的规定,最终接口可以写成下面的形式。虽然这么写可以,是简化了,但是阅读性很差。
带来两个问题,对于这里的NUM,如果前面不加修饰的话,很可能就以为它就是个变量,(实际是个常量),你不知道它居然可以通过接口型调用,(它是static修饰,必然可以是通过类名调用)。讲完属性,讲行为。大家都知道show1();是抽象方法,没写关键字怎么看出来的,尾部是(); 这样的,就是抽象的。那么抽象方法可以被覆盖,这种情况很有可能覆盖错(show1();)。原因是,它的权限是public,而且不写的话,如果你用非public覆盖,会导致失败,覆盖一定要权限足够大。所以大家都要记得,修饰符都要带着。