Java继承

继承

接口继承

一个接口继承另一个接口,被继承的接口方法都会自动的隐式继承在子类接口,但是不用实现,用extends继承。

实现继承

一个类可以继承另一个类的实现,通过extends关键字可以获得父类 所有的方法和变量。

接口实现

当一个类使用implement关键字继承一个接口的时候,必须提供接口中的所有方法,(接口中的所有方法默认public abstract)否则报错。

技术细节

细节

  • 接口可以继承多个,但是java规定单类继承子类只能是一个父类的扩展
  • 类继承接口的时候最好加上Overrride来辅助确保方法签名(signature)一致,避免错误。

super关键字

在子类中如果想要调用父类的构造函数,要用super(),不写的话,java也会自动的调用。

抽象类

public abstract class Animal() {}

特征

  • 可以继承接口,然后实现其中一些方法,也可以增加抽象方法让子类来实现,要显性写出关键字public abstract。
  • 注意: 抽象类继承接口,他不必提供实现,他会隐式的继承所有的抽象方法。

作用

充当接口和类之间的桥梁,实现接口中的冗余。可以实现一些比如isEmpty这种重复性的方法,或者设置几个变量让子类继承,会减少一点点的内存使用,主要是为了方便。

难点

产生原因

  • java运行中,其实有一个(complie-time type)也就是静态类型,还有一个动态类型(dynamic type),由于编译器只会根据静态类型来判断编译错误,这在子类父类的静态类型和动态类型互相传值的时候就会造成很多的麻烦。

例如:

我用父类的方法new一个子类的类型,他的静态类型就是父类,动态类型就是子类

Object a = new Aniaml();

动态类型 Animal
静态类型 Object

用子类类型传给父类,编译器会通过,他会找到类的列表,发现animal是object的子类。但是让aniaml = 传回的object类,就会报错,无法确定这个object类是否具有animal的方法,让编译器不安。可以用cast(animal)强制转换成animal类,但是java不会出现类型错误就出现了悖论。

解决方法

用cast类型转换(不改变本身的类型),来让编译器”通融一下“,保证编译的通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值