一篇文章教會你使用Java中的Super關鍵字基本用法
一、重寫父類方法
1.什么是重寫父類方法
在繼承關系中,子類會繼承父類所定義的方法,當在子類中對繼承方法進行一些修改,這就是重寫父類方法。也就是說子類包含父類同名方法。
2.重寫父類方法遵循“兩同兩小一大”原則
兩同:方法名,參數列表相同。
兩小:子類方法返回值類型小于等于父類方法返回值類型;子類方法聲明拋出的異常類小于等于父類方法聲明拋出的異常類。
一大:子類方法的訪問權限大于等于父類方法的訪問權限。
3.重寫父類方法案例
例如:
- //定義Animal類
- class Animal{
- public String name;//名字屬性
- public int age;//年齡屬性
- //動物叫的方法
- void shout(){
- System.out.print("動物發出的叫聲");
- }
- }
- //定義Cat繼承Animal類
- class Cat extends Animal{
- void shout(){
- System.out.print("喵喵喵~~~~");
- }
- //顯示名字和年齡方法
- public void show(){
- System.out.print("我是"+name+","+"今年"+age+"歲");
- }
- }
- public class p20 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cat c=new Cat();//創建Cat類實例對象
- c.name="英國短毛貓";//給Cat類的name屬性賦值
- c.age=2;//給Cat類的age屬性賦值
- c.show();//調用Cat類的show()方法
- c.shout();//調用Cat類的shout()方法
- }
- }
輸出的結果是:
- 我是英國短毛貓,今年2歲喵喵喵~~~~
從上面代碼中,Cat類是繼承Animal類的shout()方法,當Cat類繼承Animal類還沒有shout()方法時,調用的Animal的shout()方法并打印“動物發出的叫聲”,這時就不能描述具體的動物叫聲,Cat類對象表示貓類,發出的叫聲是“喵喵喵~~~”。方法的重寫就是在Cat子類中定義一個shout()方法對父類的方法進行重寫。在調用Cat類對象的shout()方法時,只會調用子類重寫的該方法,沒有去調用父類的shout()方法。
二、super關鍵字
1.什么是super關鍵字
super是當前類的直接父類對象,是對當前對象的直接父類對象的引用。
2.如果當子類重寫父類的方法后,子類對象是不能訪問父類被重寫的方法,可以使用super關鍵字訪問父類的成員
3.super關鍵字調用父類的成員變量和成員方法格式
- super.成員變量
- Super.成員方法([參數1,參數2,參數3,....])
4.super關鍵字的用法案例
例如:
- //定義Animal類
- class Animal{
- String name="動物";//name屬性
- int age=6;//age屬性
- void shout(){
- System.out.println("動物發出的叫聲");
- }
- }
- class Dog extends Animal{
- String name="狗";//name屬性
- //重寫父類的shout方法
- void shout(){
- super.shout();
- }
- //訪問父類成員變量
- void show(){
- System.out.println("名字:"+super.name+","+"年齡:"+super.age+"歲!");
- }
- }
- public class p22 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Dog d=new Dog();//創建狗的對象
- d.shout();//調用Dog對象的重寫的shout方法
- d.show();//調用Dog對象的show方法
- }
- }
輸出的結果是:
- 動物發出的叫聲
- 名字:動物,年齡:6歲!
從上面代碼中,首先定義一個Animal類,在Dog類繼承Animal類,然后重寫了父類的shout()方法,在子類中使用super.shout()調用父類重寫的方法,在show()方法訪問父類的屬性,super關鍵字是可以訪問屬性和方法。
三、super關鍵字調用父類的構造方法
1.super關鍵字調用父類的構造方法格式
- super([參數1,參數2,參數3,...])
2.super關鍵字調用父類的構造方法案例
例如:
- //定義Fruit類
- class Fruit{
- //定義Fruit類有參數的構造方法
- public Fruit(String name,double weight){
- System.out.print("我是一個"+name+","+"重量為:"+weight+"g!");
- }
- }
- //定義Cherry繼承Fruit類
- class Cherry extends Fruit{
- public Cherry(){
- super("櫻桃",66);//調用父類有參數的構造方法
- }
- }
- public class p23 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cherry c=new Cherry();//實例化子類Cherry對象
- }
- }
輸出的結果是:
- 我是一個櫻桃,重量為:66.0g!
從上面的代碼中,首先是定義了一個Fruit類,在Fruit類中定義了有參數的構造方法。定義Cherry繼承Fruit類,調用父類有參數的構造方法。在實例化Cherry對象就會調用Cherry類的構造方法,Cherry類的構造方法被調用時父類的構造方法也一樣被調用了。super調用父類構造方法的代碼要寫子類構造方法的第一行,只可以出現一次。
四、 總結
本文主要介紹了重寫父類的方法和super關鍵字。
重寫父類方法就是子類包含父類同名方法,遵循兩同兩小一大”原則。
super關鍵字是當前類的直接父類對象,是對當前對象的直接父類對象的引用,通過super關鍵字案例理解這個用法。
此外,本文還介紹了super關鍵字調用父類的構造的方法,介紹了它的格式和super關鍵字調用父類的構造方法案例。希望大家通過本文的學習,對你有所幫助!
本文轉載自微信公眾號「Java進階學習交流 」,可以通過以下二維碼關注。轉載本文請聯系Java進階學習交流 公眾號。