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),而方法重載對權限無要求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM