构造方法
目录:
1.概述
2. 构造方法的重载
3. static关键字的使用
4.继承中的构造方法
5.super关键字的使用
6.方法的重写
7.final关键字的使用
1.概述
构造方法的作用:创建对象,给对象中的成员进行初始化。 构造方法格式的特点:
- 方法名与类名相同
- 没有返回值类型,连void都没有
- 没有具体的返回值
构造方法的注意事项:
1:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
2:如果我们给出了构造方法,系统将不再提供默认的无参构造方法,这个 时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
2.构造方法的重载
- 一个类中可以有 多个 构造方法,多个构造方法是以 重载 的形式存在的
- 构造方法是可以被 private 修饰,作用是:其他程序无法创建该类的对象
举例:
class Person {
private int age;
private String name;
// 私有无参数的构造方法,即外界不能通过new Person();语句创建本类对象
private Person() {
}
// 多个构造方法是以重载的形式存在
Person(int a) {
age = a;
}
Person(String nm, int a) {
name = nm;
age = a;
}
}
3.static关键字的使用
static关键字的特点:
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 可以通过类名调用
静态变量与成员变量之间的区别:
- 所属不同
静态变量属于类,所以也称为类变量
成员变量属于对象,所以也称为实例变量(对象变量) - 内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存 - 内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失 - 调用不同
静态变量可以通过类名调用,也可以通过对象调用,推荐使用类名调用
成员变量只能通过对象名调用
4.继承中的构造方法
为什么子类中所有的构造方法默认都会访问父类?
因为子类会继承父类中的数据,可能还会使用父类的数据。 所以,子类初始化之前,一定要先完成父类数据的初始化。
父类没有无参构造方法,子类怎么办?
- 在父类中添加一个无参的构造方法
- 子类通过super去显示调用父类其他的带参的构造方法
- 子类通过this去调用本类的其他构造方法
举例:
package com;
public class didi {
public static void main(String[] args) {
didi zi = new didi();
new didi(20);
Zi zi1 = new Zi();
new Zi(20);
}
public didi() {
super();
System.out.println("无参构造");
}
public didi(int aaa) {
super();
System.out.println("父类的有参构造执行了"+aaa);
}
}
class Zi extends didi{
public Zi() {
super(100); //调用父类的空参构造
System.out.println("子类的参构造执行了");
}
public Zi(int b) {
this();
System.out.println("子类的空参构造执行了");
}
}
5.super关键字的使用
this 代表的是本类对象的引用
super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父 类的成员
super与this之间的区别:
- 调用成员变量
this.成员变量 调用本类的成员变量
super.成员变量 调用父类的成员变量 - 调用构造方法
this(…) 调用本类的构造方法
super(…) 调用父类的构造方法 - 调用成员方法
this.成员方法 调用本类的成员方法
super.成员方法 调用父类的成员方法
注意:
super(…)或者this(….)必须出现在第一条语句上
6.方法的重写
重写:子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
方法重写的应用:当子类需要父类的功能,而功能主体子类有自己 特 有内容时,可以重写父类中的方法。
这样,即沿袭了父类的功能,又定义了子类特有的内容。
方法重写的注意事项:
- 父类中私有方法不能被重写
因为父类私有方法子类根本就无法继承 - 子类重写父类方法时,访问权限不能更低
最好就一致 - 父类静态方法,子类也必须通过静态方法进行重写
7.final关键字的使用
概述:final关键字是最终的意思,可以修饰类,变量,成员方法。
- 修饰类: 被修饰类不能被继承
- 修饰方法: 被修饰的方法不能被重写
- 修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量
- 修饰的引用类型的变量 :值为对象地址值地址值不能更改,但是地址内的对象属性值可以修改final
- 修饰成员变量 :需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)