今天说一说抽象的(abstract)与接口(interface)
我要先告诉大家的是它的作用是可以修饰方法及抽象类的,
那么再说一说它的作用,大家可以想象一下,在子类与父类继承中,子类继承了父类,会发生重写的关系,
好比如,父类有一百元,那么继承他的子类也有一个钱的方法,但是每个人手中的钱是不一样的,
需要每一个子类重写,这样父类就没有了存在的意义了,但是恰恰相反,他的存在是起到了格式化的作用(可以理解为规范的作用)
比如!正常的我们是这样写
public void 类名(){
方法体;
}
但是我们要把它的方法体去掉!改为
public abstract void 类名();
我刚刚第二句就说了,abstract是可以修饰方法与抽象类的
它修饰的方法是没有方法体的,我们称它修饰的方法为抽象方法(别问我为什么?我也想知道为什么叫这名字。。。)
那么叫这名字就有它的独特之处了!这抽象方法是只能存在于抽象类中。
他的特殊之处还不止这些,
当某一个子类继承了抽象类(父类),那么这个类就必须重写抽象类中的所有抽象方法(有几个写几个)
但是也不是绝对的,抽象类中可以有抽象方法,也可以有普通方法
当然了如果碰见了一个父类有多个子类的,那么这就麻烦了,这时,有一个懒办法!!!
将子类也加上abstract,但是!!!谁继承了这个子类,那么对不起,
你要不写有多少个父类是abstract,你就重写几遍,要不就继续往下坑!!!
反正到最后你得写够有你的多少父类写了abstract,你就重写几遍,要不写?对不起!报错!!!
但是坑完了,对不起!接着出现问题!抽象类还不能被实例化(不能创建对象)!!!
抽象类存在的意义只是被子类继承,仅此而已!!!
然后该讲接口(interface)了
小心了,接口可是最像抽象类的哦!!!
接口是一个特殊的抽象类
接口中所有的方法都是抽象方法,并且接口中所有的方法都是默认使用public abstract修饰的
定义的格式:
public interface 接口名{}
这个的类名是特别严谨和强势的,谁继承我的接口,那么他的方法名就得和这个一样!!!
那怎么写方法体?还写public void 加类名?
别忘咯我刚刚写的啥!
接口中所有的方法都是抽象方法
所以写方法体还是要写抽象方法的。
但是是不允许是私有的!必须是公共的抽象方法
当然了,其实不写abstract也是可以的,这就牵扯出了他的另一个特性!
接口中所有的方法都是默认使用public abstract修饰的!!!
接口中所有属性(变量)都是默认使用public static final修饰的,但必须给定初始值
同样,接口与上面一样,同样是不能被实例化的。
因为类与接口不是一种东西,所以,不能是继承关系,只能是实现关系!即类实现接口
直接在类名后面写implements 加父类名即可
这时候,类既然实现了该接口,那么就必须重写接口中的所有方法
类是同样多实现的,即一个类可以实现多个接口,接口之间使用,分割“,”
类是单继承,多实现的(一个类只能继承一个父类,但是可以实现多个接口)
接口之间是允许继承的,类与类是允许继承的,类与接口是实现
那如何实现又继承又实现?
可以先继承后实现