(1)继承: extends关键字,描述子类(派生类)、父类(基类、超类)的关系,有以下作用注意点:
① 子类继承父类的所有属性和方法(私有的隐式继承(不能直接使用,但可以间接使用,即可以在主方法中实例化调用,但不能再子类中实例化),其他显示继承)。
② 子类可以扩展新的属性和方法
③ Java一个子类只能继承一个父类,即子类不可以多继承。但java支持多层继承,如B继承A,C继承B,一般继承三层就ok
④ 继承的作用:建立子类与父类的关系;消除重用代码
⑤ 注意: 在子类构造之前一定先执行父类的构造(默认调用无参构造),即子类对象实例化之前先实例化父类并调用父类的无参构造方法。
⑥ 关于继承中的super():当调用父类的无参构造时,有没有都无所谓,但调用无参构造的时候就必须要有,且必须放在首行。还有super()与this()不能同时出现
(2)覆盖:方法覆盖和属性的覆盖
方法覆盖: 子类重新定义了一个与父类方法名称相同、参数类型及个数相同、返回值相同的方法
注意: ①父类中的方法被子类覆写后,当实例化子类时,调用的是子类的覆写后的方法,不再是父类中的方法
②被覆写的子类不能拥有比父类中更严格的访问控制权限(public>default>private)
技巧(多层继承的前提下): ① 看实例化哪个类?
② 观察子类是否覆写父类的方法,是就调用子类中覆写的方法,否就调用父类中的方法
那问题来了: 怎么调用父类的方法呢?
我们都知道,this.方法() 是先在本类中找,有就执行,没有就去父类中找。而super.方法() 可以实现直接调用父类中的方法,不管子类中有没有。(两者的调用只认方法名称)
class Book{
public void print() {
System.out.println("Book类中print()方法");
}
}
class Book_java extends Book{
public void print() {
//super.print();
System.out.println("这是子类Book_java中的print()方法");
}
}
public class Test01 {
public static void main(String[] args) {
Book_java book_java = new Book_java();
book_java.print();
}
}
(3)重载
(1)方法重载是让类以统一的方法处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数(类型)。重载Override是一个类中多态性的一种表现。
(2)java的方法重载,就是在类中可以创建多个方法,他们具有相同的名字,但具有不同参数和不同的定义。调用方法时通过传递给他们不同的参数个数和参数类型来决定具体使用那个方法,这就是多态性。
(3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不同。无法以返回类型来作为重载函数的区分标准。