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

JAVA:

今天总结一下构造方法、关键字、方法重载和方法重写的异同
 
一、构造方法(构造函数)
1、构造方法的作用:
一是创建对象时调用构造方法创建对象,二是可以初始化多个属性
【学生类创建一个学生对象stu:Student stu = new Student()  这里调用的是无参构造函数。】
2、构造函数的结构及注意事项:
1、结构:【public 类名([参数类型1 参数名1,参数类型2 参数名2..... ])】
2、参数可无
3、一般在创建一个类的时候,如果创建的类没有构造函数程序会自动创建一个默认的无参构造函数,当你在类中已经写有构造函数,那么默认无参构造函数将会被覆盖,也就是不存在。
 
二、关键字this:
this主要有三个作用:
1、在本类中作为对象调用属性,在属性名与参数名相同时,需要用this来调用属性给属性赋值,否则无法赋值。
2、调用构造函数
3、可以返回本类对象(目前用途我还不是很清楚...)
 
例子:创建一个学生类
 1 package object1;
 2 
 3 public class Student {
 4     //属性 (四种访问权限的属性)
 5     public String name;
 6     protected String sno;
 7     int score;
 8     private int age;
 9     
10     //注意点:1不能写返回类型  2 方法名为类名。 结构为 public 类名([参数]){};
11     public Student(String name,String sno) {
12         //初始化属性
13         this.name = name;
14         this.sno = sno;
15     }
16     /*
17      * 方法重载(构造方法也可以重载)  1方法名相同  2返回类型、参数类型/个数不能全部相同
18      */
19     public Student(){
20         //调用另一个构造函数(方法)
21         this("缺省","20190123");
22      /* 初始化属性
23         name = "B";  */
24     }
25     public void Study()
26     {
27         System.out.println(name + "正在学习...");
28     }
29     protected void Study(String sno,String name)
30     {
31         
32         System.out.println(name + "的学号时是:"+sno);
33     }
34     public Student object() {
35         return this;
36     }
37 }

 主类

 1 package object1;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Student stu1 = new Student("abc","123");
 8         Student stu3;
 9         System.out.println("用无参构造函数生成对象stu1: \n");
10         stu1.Study();
11         stu1.Study("201901", "abc");
12         
13         System.out.println();
14         Student stu2 = new Student("ABC","20190123");
15         System.out.println("用有参构造函数生成对象stu2: \n");
16         stu2.Study();
17         stu2.Study("201923", "A");
18         
19      /*   //对属性的使用
20         stu1.name = "B";
21         stu1.sno = "90120123";
22         stu1.score = 100;
23         //报错,因为age是私有属性,不能被其他类直接调用
24         stu1.age = 18;  */
25         stu3 = stu1.object();
26         stu3.Study();
27         stu3.name = "bvjkbsd";
28         System.out.println(stu3.name); 
29     }
30 
31 }
View Code

运行结果

用无参构造函数生成对象stu1: 
abc正在学习...
abc的学号时是:201901

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

stu3: 
abc正在学习...
bvjkbsd

  

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

 

转载于:https://www.cnblogs.com/liu1234/p/10310718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
构造函数和方法中使用super关键字: 在Java中,super关键字用于调用父类的构造函数或方法。当子类构造函数或方法需要继承父类的某些属性或方法时,可以使用super关键字来调用父类相应的构造函数或方法。 示例代码: ``` public class Animal { String name; int age; public Animal(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println(name + " is eating."); } } public class Dog extends Animal { public Dog(String name, int age) { super(name, age); } @Override public void eat() { super.eat(); System.out.println(name + " is eating bones."); } } public class Main { public static void main(String[] args) { Dog myDog = new Dog("Buddy", 3); myDog.eat(); } } ``` 在上面的示例代码中,Dog类继承了Animal类,并通过super关键字调用了父类Animal的构造函数。在子类中重写了父类的eat()方法,并在方法中使用super关键字来调用父类的eat()方法,然后再添加一行输出语句。 重载方法: 在Java中,方法重载是指在同一个类中,有多个方法名相同但参数列表不同的方法。方法的参数列表包括参数的类型、数量和顺序,只要有一个不同,就可以认为是不同的方法。 示例代码: ``` public class Calculator { public int add(int x, int y) { return x + y; } public double add(double x, double y) { return x + y; } public int add(int x, int y, int z) { return x + y + z; } } public class Main { public static void main(String[] args) { Calculator myCalculator = new Calculator(); System.out.println(myCalculator.add(1, 2)); System.out.println(myCalculator.add(2.5, 3.5)); System.out.println(myCalculator.add(1, 2, 3)); } } ``` 在上面的示例代码中,Calculator类中定义了三个add()方法,分别接受不同数量和类型的参数。在Main类中创建了一个Calculator对象,并分别调用了三个不同的add()方法。 重写方法: 在Java中,方法重写是指在子类中定义一个与父类中同名、同参数列表、同返回类型的方法,并且这个方法的访问修饰符不能比父类的更严格。 示例代码: ``` public class Animal { public void move() { System.out.println("Animal is moving."); } } public class Dog extends Animal { @Override public void move() { System.out.println("Dog is running."); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); Dog myDog = new Dog(); myAnimal.move(); myDog.move(); } } ``` 在上面的示例代码中,Animal类中定义了一个move()方法,用于显示动物在移动。Dog类继承了Animal类,并重写了move()方法,用于显示狗在奔跑。在Main类中创建了一个Animal对象和一个Dog对象,并分别调用了它们的move()方法,输出结果分别为“Animal is moving.”和“Dog is running.”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值