继承
super关键字
super:可以表示为父类的对象。
在构造方法中会有一个默认的super( ); 调用父类的无参构造方法,所以创建子类对象时会先创建父类对象。
如果父类中没有提供无参的构造方法,那么子类可以继续构造无参的和全参的构造方法。但是都需要提供super的有参的方法。
super( )必须放在有效代码的第一行。
同一个方法中super不能和this共存。
this和super调用普通从成员与构造方法
- 调用普通成员:
- this.成员变量 可以访问本类对象的成员变量
- super.成员变量 可以访问父类对象的成员变量
- this.成员方法() 可以访问本类对象的成员方法
- super.成员方法() 可以访问父类对象的成员方法
- 调用构造方法:
- this(其他参数) 可以访问本类其他的构造方法
- super(其他参数) 可以访问父类其他的构造方法
- 默认子类调用父类构造方法
- 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super();
重写
子类中存在与父类中方法签名相同的非静态的方法,称之为重写,也叫覆盖。
方法重写的原则:
- 方法签名一致
- 父类中方法的返回值类型时基本数据类型和void时,子类重写的方法的返回值类型耀保持一致。
- 子类中重写的方法的权限修饰符不小于父类的权限修饰符。
- 父类中方法的返回值类型是引用数据类型时,子类重写的方法返回值类型要么保持一致,要么子类中方法的返回值类型是父类返回值类型的子类。
- 异常还没学。
多态
多态是继封装、继承之后,面向对象的第三大特性。
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java作为面向对象的语言,同样可以描述一个事物的多种形态。
多态的体现形式
编译时多态:重载
运行时多态:向上造型、重写
向上造型
父类来声明子类的对象
在使用向上造型创建对象的时候,编译期间只会检查声明类和创建类之间是否有继承关系,而并不关心具体是哪一个子类,到了运行时才会确定具体的子类。
如果使用向上造型创建对象,这个对象所能执行的方法由父类来规定,具体执行的其实是子类,只是编译期间不认识
运行时多态(向上造型、重写)是基于继承
编译看左边,运行看右边。
为什么子类重写的方法的权限修饰符的范围要大于等于父类父类对应方法的权限修饰符的范围
为什么如果父类方法的返回值类型是引用数据类型,那么子类重写的方法的返回值类型要么与父类方法返回值类型一致,要么子类方法的返回值类型是父类方法返回值类型的子类
static
static是Java中的关键字,是一个修饰符,可以修饰数据、方法、代码块、内部类
static修饰变量称之为静态变量/类变量。静态变量是随着类的加载而加载到方法区,在方法区中被赋予了默认值。静态变量是先于对象而存在的,可以通过类名来调用。该类所产生的所有的对象共用的是同一个静态变量,因为每一个对象存储的是该静态变量的地址。
- 类是加载到方法区中的
- 类是在第一次被使用的时候才加载到方法区中
- 类只加载一次
静态变量能否定义到构造方法中?不能
静态变量能否定义在普通方法中?不能
静态方法
static修饰的方法称之为静态方法。静态方法在类加载的时候加载到方法区,并没有执行只是存储在方法区。在方法被调用的时候到栈内存中执行。静态方法本身也是先于对象存在,所以习惯上是通过类名来调用静态方法。