1.为什么需要使用继承?
1.提高代码的重用性;
2.提高程序的扩展性。
2.Java类继承类的语法格式
Java中继承类的关键字:extends
格式:
public class 类名(子类、派生类) extends 类名(父类、基类){
}
注意:Java类的继承是单继承(一个子类只能有一个父类).
现实生活中的什么关系需要使用继承来实现呢?
包含关系:
汽车包含轿车、卡车、...
学生包含大学生、高中生、...
3.子类能继承到父类的那些内容?
Java中子类能继承到父类的所有属性和方法(但是不包括构造方法)。
子类是否可以定义父类中没有定义过的方法和属性?
可以的
4.方法重写
什么情况下要使用方法重写呢?
子类和父类都有同一个方法,但是子类方法的具体实现和父类不同时,此时就需要方法重写。
方法重写的条件:
1.要存在继承关系;
2.方法重写时,子类方法的访问修饰符可以大于或者等于父类方法的访问修饰符;
3.方法重写时,子类方法的返回值数据类型,方法名,参数都必须要和父类的完全一致;
4.方法的具体实现要不同。
怎么调用重写后的方法(父类和子类都有同一个方法)呢?
根据new关键字后的类名来决定,如果类名是子类的,则优先调用子类的方法,如果子类没有这个方法,则调用父类中的。
如果想要父类和子类的方法都执行,要如何处理呢?
super关键字来调用父类的方法。
是不是所有的方法都能重写呢?
1.构造方法不能重写
2.final修饰的方法不能重写
3.private修饰的方法不能重写,如果写了,叫做定义新方法。
4.默认的修饰的方法在特定情况下也不能重写,如果写了,叫做定义新方法。
5.自动转型
要使用自动转型就必须存在继承关系。
自动转型的格式:
父类名 对象名 = new 子类名();
method(父类名 对象名){
}
父类名 对象名A = new 子类名();
子类名 对象名B = new 子类名();
method(对象名A);
method(对象名B);
使用自动转型一定会存在无法调用子类特有的属性和方法。
为什么会存在呢?
这是Java编译机制的问题,Java在编译的时候编译的是java文件,只会根据对象名的类型,进行属性和方法查找,如果存在则编译通过,如果不存在则编译报错。
运行的时候优先调用new关键后类名中的方法,这是程序运行的时候已经到内存中了,对象名通过内存查找,首先找到的是子类的,所以调的是子类,如果子类没有,再去父类对象中查找、调用。