重载 what
体现在构造器的重载,
在同一个类中,同一个方法名,参数的个数,顺序或类型方面有所不同。
this关键字
用来调用属性,方法,构造器。理解为当前创建的对象或当前对象。
1.“this.属性”或“this.方法”来调用当前属性或方法。一般省略。只有当形参和成员变量同名的时候,才会用"this.变量"的方式表示成员变量。这里在构造器和方法中都适用。
2.this(形参列表)方式可以调用本类中指定的其他构造器(不能调用自己)。所以如果一个类中有n个构造器,则最多有n-1个构造器使用了“this(形参列表)”。而且this(形参列表)必须声明在当前构造器的首行。构造器的内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器。
继承性 what
1.提高代码的冗余性.
2.子类通过继承原有的功能可以增加自己新的功能.
- 子类继承父类后,子类拥有父类所有的属性,方法。
- 父类声明为private的属性或方法,子类继承父类以后,仍然认为获取父类中私有的结构。只是因为封装性的影响,使得子类不能直接调用父类的结构而已。此时可以通过get,set方法调用私有属性,或者在父类中的公共方法里调用其私有方法。而子类通过调用公有方法来执行父类的私有方法。
3.所有类都默认Object类(java.lang.Object),Object类位于类的最上层,所有类都是Object类的子类。
4.构造方法是一个类独有的方法不会被它的子类继承,但是子类在实例化对象时:如果子类的构造器没有显示的调用父类的构造器,则将自动调用父类默认的构造器(无参)。相当于默认省略了super()。子类实例化对象时,会先调用父类的构造器。
- 如果子类的构造器没有显示的调用父类的构造器 ,默认调用super();
- 子类要使用父类有参的构造器,使用super(参数)形式,且super必须是子类构造方法中的头一条语句。
- 如果父类没有不带参数的构造器,且子类的构造器中又没显示的调用父类其他构造器,则Java编译器将报告错误。
重写 what
子类继承了父类之后,父类继承的方法中在子类不适用时,子类可以将父类的方法进行重新描述。这个重新描述的方法的方法名,形参列表的顺序,类型都与父类的方法相同。重写后,创建子类对象后,用子类对象调用子类父类对象中的同名同参数方法时,实际上执行的是子类重写父类的方法。
重写的方法遵循:
1.子类和父类该方法的方法名和形参列表相同。
2.子类重写的权限修饰符不小于父类的权限修饰符,子类不能重写父类中的private权限的方法。
3.返回值类型,若父类被重写的方法的返回值类型是基本数据类型或者是void,则子类重写的方法与其父类相同。父类被重写的方法的返回值类型是A型,则子类重写的方法的返回值类型可以是A类或者A类的子类。
4.子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
super关键字
理解为:父类的
用来调用属性,方法,构造器。
在子类的方法或构造器中,通过使用“super.属性”或“super.方法”显示的调用父类中声明的属性或方法。通常省略。
特殊情况:
1.子类父类中定义了同名的成员变量,如果要使用父类的成员变量,显示的使用super关键字。
2.子类重写了父类的方法后,若要调用父类被重写的方法,使用super关键字。
调用构造器
1.在子类显示的使用“super(形参列表)”的方式调用父类中声明的指定构造器。它必须在子类构造器的首行。
2.“this(形参列表)”或“super(形参列表)”只能二选一,
3.在构造器的首行,没有显示的声明“this(形参列表)”或“super(形参列表)”,默认调用为父类的空参构造器。
4.在类的构造器器中,至少有一个类的构造器使用了"super(形参列表)"。
多态性
作用:
- 一个事物的多种形态,父类的引用指向子类的对象。如,Person man = new Man();子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。
- 提高代码的通用性。
使用
成员方法:引用变量有两个类型分别是编译时类型和运行时类型。
- 编译时类型由声明该变量时使用的类型决定。
- 运行时类型由实际赋值给该变量的对象决定。
1.编译时,看左边;看的是父类的引用,查看引用变量所声明的类中是否有所调用的方法。
2.运行时,看右边。看的是子类的对象,调用实际new的对象所属的类中的重写方法。
3.编译类型和运行类型不一致,就出现了对象的多态。
使用前提:
1.类的继承关系
2.方法的重写
虚拟方法:多态下,被重写的父类方法。
父类根据赋给它的不同子类对象,动态调用属于子类的该方法。方法的调用是在运行中确定的。
重载和重写的区别:
重载:允许存在多个同名的方法,方法的参数不同,编译器根据方法的不同的参数表,对同名方法名称做修饰。对于编译器而言,同名方法成了不同方法,它们调用的地址在编译期就绑定了。子类可以重载父类的同名不同参数的方法。在方法调用前,编译器就已经确定了所要调用的方法。“早绑定”或“静态绑定”
重写:对于多态,只有等到调用的时候,解释运行器才会确定所要调用的具体方法。“晚绑定”或“动态绑定”