抽象类和接口
Posted bzbz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口相关的知识,希望对你有一定的参考价值。
抽象类:用abstract关键字来修饰一个类时,这个类叫做抽象类
-
某种意义上来讲,抽象方法就是被用来重写的,在父类声明的抽象方法(只需声明,不需要去实现)要在子类里边重写,如果子类不想重写,那么再在这个子类里边把这个抽象方法再定义为抽象方法,让这个子类的子类去重写它。
-
这里有一个规则:既然父类里面的方法是抽象的,那么对于整个类来说,它就有一个没有实现的方法,这个方法不知道怎么去实现,那么这个类是就是残缺不全的,因此这个类应该被定义为一个抽象类。
-
java语言规定,当一个类里有抽象方法的时候,这个类必须被声明为抽象类
-
子类继承父类时,如果这个父类里面有抽象方法,并且子类觉得可以去实现父类的所有抽象方法,那么子类必须去实现父类的所有抽象方法;反之,这个父类里面的抽象方法,子类如果觉得实现不了,那么把就子类也声明成一个抽象类。
抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法
接口:抽象方法和常量值定义的集合
-
本质:接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
-
java在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract关键字默认都是省略掉的是单继承,但是现实是生活中很多时候都得是多继承,为了实现多继承,可以选择一个类继承,把其他别的类都封装成接口,这样就可以实现多继承了。
-
多个无关的类也可以实现一个接口(接口是一种抽象类,可以被不同的类继承)
-
一个类可以实现多个无关的接口(每实现一个接口,就相当于继承了一个类,实现多个接口,就相当于实现了多继承)
-
假如一个抽象类里所有方法都是抽象的,没有任何方法需要这个抽象类去实现,且这个抽象类里所有变量都是静态变量,这时可以把一个抽象类定义为一个接口
-
把一个类定义为一个接口的格式是,把声明类的关键字class替换成声明接口的关键字interface,例如 public interface Strudent{}
-
接口(interface)是一种特殊的抽象类,在这种抽象类里面,所有的方法都是抽象方法,并且这个抽象类的属性(即成员变量)都是声明成“public static final 类型 属性名”这样的,默认也是声明成“public static final”即里面的成员变量都是公共的、静态的,不能改变的。因此在接口里面声明常量的时候,可以写成“public static final 类型 常量名=value(值)”这样的形式,也可以直接写成“类型 常量名=value(值)如:“public static final int id=10”可以直接写成“int id=10”这样的形式,因为在接口里面默认的属性声明都是“public static final”的,因此“public static final”可以省略不写。
-
在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract”关键字默认都是省略掉的
-
注意:在抽象类里面声明抽象方法是一定要使用“abstract”关键字的,而在接口里面声明抽象方法可以省略掉“abstract。
-
在接口里面声明的抽象方法默认是“public(公共的)的,也只能是“public(公共的)”
-
接口实现多重继承的好处:作为接口来说,一个类可以从接口继承(或者叫实现接口),这也是多继承,接口里面的成员变量不专属于某个对象,都是静态的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也就实现了多重继承,而且又避免了多重继承容易出现问题的地方。
接口特性:
-
接口可以多重实现
-
-
接口中只能定义抽象方法,且用pubic修饰
-
接口可以继承别的接口
以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章