1、继承extends
先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一班类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类,超类。Java不支持多重继承,子类只能有一个父类。(C++不是)
子类的权限一定大于父类的权限
父类private的不能被继承
final 类final方法:不能被继承
java语言中:java只支持单继承,不支持多继承(c++支持)。
* eg:b继承a,就不能继承b或其他类
* 因为多继承容易带来安全隐患:当多个父类中定义了相同内容,
* 当功能内容不同时,子类对象不确定要运行哪一个.
* 但是java保留这种机制。并用另一种形式来完成表示。多实现。
同一个包中和不再同一个包中的继承
2、方法重载
如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
方法名相同
方法的参数类型,个数顺序至少有一项不同
方法的返回类型可以不相同
方法的修饰符可以不相同
main方法也可以被重载
3、方法覆盖
如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
子类的方法名称返回类型及参数签名 必须与父类的一致
子类方法不能小于父类方法的访问权限
子类方法不能抛出比父类方法更多的异常
方法覆盖只存在于子类和父类之间,同一个类中只能重载
父类的静态方法不能被子类覆盖为非静态方法
子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(满足覆盖约束),
而且Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
静态只能静态覆盖。
父类的私有方法不能被子类覆盖
父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)
父类的非抽象方法可以被覆盖为抽象方法
继承的利弊和使用原则:
继承数的层次不可太多
继承数的上层为抽象层
(1)定义了下层子类都用友的相同属性和方法,并且尽可能默认实现,从而提高重用性
(2)代表系统的接口,描述系统所能提供的服务
继承关系最大的弱点:打破封装
精心设计专门用于被继承的类
(1)对这些类必须提供良好的文档说明
(2)尽可能的封装父类的实现细节,把代表时间细节的属性和方法定义为private类型
(3)如果某些实现细节必须被子类访问,定义为protected类型
(4)把不允许子类覆盖的方法定义为final类型
(5)父类的构造方法不允许调用可被子类覆盖的方法
(6)如果某些类不是专门为了继承而设计,那么随意继承它是不安全的