一、面向对象的特性之二:继承性
1. 为什么使用继承
①提高代码的复用性
②利于维护
③继承让类与类之间产生了关系,可以创建更加特殊的类型(多态)
2. 如何使用继承:
关键字: extends --- "扩展" 明确子类是父类的扩展
class A extends B{}
子类: A 父类(超类、基类、SuperClass):B
3. 通过继承,子类可以“继承”父类中所有的属性(包括私有的)和方法。构造器除外---不会继承,但是可以调用
注意:父类中私有的属性,可以被子类继承,但是因为 private 修饰符的作用子类不能直接访问
若要访问通过公共的 get/set 方法进行访问
4. 继承的注意:
①不能为了简化代码,获取某功能而继承,若要继承两个类之间必须满足一定的所属关系: is a
②Java 只支持单继承,不支持多继承(一个父类可以有多个子类,但是一个子类只能有一个父类)
③Java 支持多层继承
class A{
void test1(){}
void test2(){}
}
class B extends A{
//void test1(){}
//void test2(){}
}
---------------------------------
class A{
void test1(){
//11111111111111
}
}
class B{
void test1(){
//22222222222222
}
}
class C extends A, B{}
C c = new C();
c.test1();
二、方法的重写(方法的覆盖 Override) : 若父类中的方法对于子类来说不适用,子类可以对父类中方法进行重写
前提:要有继承关系
①方法名与参数列表必须相同
②子类重写方法的访问控制修饰符不能小于父类被重写方法的访问控制修饰符 访问控制修饰符要往大了去,其他要往小了去
③子类重写方法的返回值类型可以是父类被重写方法返回值类型的子类(指引用数据类型)
④子类重写的方法所抛出的异常必须和父类抛出的异常类型保持一致或是其子类
否则不构成重写
(通常应用时,使方法签名一模一样)
【面试题】 Overload 和 Override 的区别?
前提:在同一个类中
①方法名必须相同
②参数列表必须不同(参数的类型、参数的个数)
注意:与返回值类型无关
三、super 关键字: 使用方式与 this 关键字几乎一模一样
this : super()