Java -- 构造函数 & this & 方法重写和方法重载的区别

时间:2021-11-22 19:08:46

JAVA:

今天总结一下构造方法、关键字、方法重载和方法重写的异同
 
一、构造方法(构造函数)
1、构造方法的作用:
一是创建对象时调用构造方法创建对象,二是可以初始化多个属性
【学生类创建一个学生对象stu:Student stu = new Student()  这里调用的是无参构造函数。】
2、构造函数的结构及注意事项:
1、结构:【public 类名([参数类型1 参数名1,参数类型2 参数名2..... ])】
2、参数可无
3、一般在创建一个类的时候,如果创建的类没有构造函数程序会自动创建一个默认的无参构造函数,当你在类中已经写有构造函数,那么默认无参构造函数将会被覆盖,也就是不存在。
 
二、关键字this:
this主要有三个作用:
1、在本类中作为对象调用属性,在属性名与参数名相同时,需要用this来调用属性给属性赋值,否则无法赋值。
2、调用构造函数
3、可以返回本类对象(目前用途我还不是很清楚...)
 
例子:创建一个学生类
 package object1;

 public class Student {
//属性 (四种访问权限的属性)
public String name;
protected String sno;
int score;
private int age; //注意点:1不能写返回类型 2 方法名为类名。 结构为 public 类名([参数]){};
public Student(String name,String sno) {
//初始化属性
this.name = name;
this.sno = sno;
}
/*
* 方法重载(构造方法也可以重载) 1方法名相同 2返回类型、参数类型/个数不能全部相同
*/
public Student(){
//调用另一个构造函数(方法)
this("缺省","20190123");
/* 初始化属性
name = "B"; */
}
public void Study()
{
System.out.println(name + "正在学习...");
}
protected void Study(String sno,String name)
{ System.out.println(name + "的学号时是:"+sno);
}
public Student object() {
return this;
}
}

主类

 package object1;

 public class Main {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu1 = new Student("abc","123");
Student stu3;
System.out.println("用无参构造函数生成对象stu1: \n");
stu1.Study();
stu1.Study("201901", "abc"); System.out.println();
Student stu2 = new Student("ABC","20190123");
System.out.println("用有参构造函数生成对象stu2: \n");
stu2.Study();
stu2.Study("201923", "A"); /* //对属性的使用
stu1.name = "B";
stu1.sno = "90120123";
stu1.score = 100;
//报错,因为age是私有属性,不能被其他类直接调用
stu1.age = 18; */
stu3 = stu1.object();
stu3.Study();
stu3.name = "bvjkbsd";
System.out.println(stu3.name);
} }

运行结果

用无参构造函数生成对象stu1:
abc正在学习...
abc的学号时是:201901 用有参构造函数生成对象stu2:
ABC正在学习...
A的学号时是:201923 stu3:
abc正在学习...
bvjkbsd

  

 
三、方法重载和方法重写
两个都是原方法已经无法满足需求了而重写或者重载,但两者依旧是有区别的。两者最明显的区别就是方法重载是在同一个类中写的,方法重写是在子类中对父类的方法进行重写,也就
是不同类中,其次方法重载是要求方法名相同,返回类型、参数类型、参数个数至少要有一个不一样,而方法重写要求方法名,返回类型、参数类型、参数个数全部相同。最后是方法重
写的访问权限只能扩大(权限大小:public > protected > 缺省 > private),而方法重载对权限无要求。