iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

30天Java由淺入深系列 第 23

Day 23 : 類別繼承( 3 )

  • 分享至 

  • xImage
  •  

this & super

此章節會繼續介紹關於繼承的進階主題,有牽涉到前述之容,可以回去複習喔。
thissuper是在繼承中常用到的兩個物件關鍵字。
兩者使用上的方法大致上相同,主要是代表存取上的東西不一樣 :

this 是存取「自身類別」的屬性 ; super是存取「父類別」內的屬性

會使用到這兩個關鍵字的優勢在於

  1. 繼承關係複雜時,使用此減少了呼叫錯誤的可能性。
  2. 執行大型專案的同時,各個建構子內容獨立好修改,具有繼承之「擴充」功能。

this - 本身類別存取關鍵字

宣告 this 的格式如下:

this.自身類別的屬性(傳入引數);
  • 這邊我們先透過建構子間的互相呼叫熟悉 this 存取範圍與用法,下段內容會再結合繼承的概念 :
/*First File : Student.java*/
    class Student{
	String name;
    int group; 
	char gpa;
	static int count = 0;

	Student(){
		name = "Unknowen";
		group = 1;
		gpa = 'C';
		count++;
	}

	Student(String name){
		this();                //初始化內容
		this.name = name;
	}
	
	Student(String name, int group){
		this(name);
		this.group = group;
	}

	Student(String name, int group, char gpa){
		this(name,group);
		this.gpa = gpa;
	}

	void printout_info(){
		System.out.println("Student ID : " + count);
		System.out.println("Student name : " + name);
		System.out.println("Student group : " + group);
		System.out.println("Student gpa : " + gpa);
	}
}
/*Second File : Grade.java*/
class Grade{
	public static void main(String[] args){
		Student s1 = new Student();
		s1.printout_info();

		Student s2 = new Student("c");
		s2.printout_info();

		Student s3 = new Student("ch",2);
		s3.printout_info();

		Student s4 = new Student("chi",3,A);
		s4.printout_info();
	}
}

輸出結果 :
https://ithelp.ithome.com.tw/upload/images/20221008/201512160p0HkvvUss.png

  • 此程式透過在主函數中呼叫不同建構元,傳入引數到 Student 內。其中可以觀察,每當我們建立一個建構元並呼叫時,它會透過this去初始化內容。

this 即是代表「自身類別」之關鍵字


super - 父類別存取關鍵字

super 之宣告方法與this相同,這節我們結合兩個關鍵字並利用繼承觀察。

class Sum
{
   protected int num;
   protected int total;
   public void show_num(){
      System.out.println("num = " + num);
   }

   Sum(int a, int b){
      this.total = a + b;
   }
		
   void printout_sum(){
	  System.out.println(this.total);
   }
}

class Add extends Sum
{
   Add(int a, int b){
      super(a,b);
   }

   int num;
   public void show_num(){
      super.num = 126;
	  this.num = 136;
      System.out.println("num = "+ num);
      super.show_num();
   }
}

public class Main{
   public static void main(String args[]){
      Add new_obj = new Add(46,29);
	  new_obj.printout_sum();
      new_obj.show_num();
   }
}

輸出結果
https://ithelp.ithome.com.tw/upload/images/20221008/20151216O0XnMsav6f.png

  • 程式解析 :
  1. 我們可以直接看到子類別中的show_num函數。super設定父類別中的變數,this設定此類別中的變數,所以在印出下一行的num是子類別中的變數,再來是父類別。
  2. 此程式我們利用建構子並透過super傳引數到父類別中印出。

super 即是代表「父類別」之關鍵字


本章程式碼範例參考[Java]super() 與 this()Java備忘筆記做更改

內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon28.gif


上一篇
Day 22 : 類別繼承( 2 )
下一篇
Day 24 : 抽象
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言