this关键字+super关键字
一.this關鍵字
1.實例一:
(1)需求:使用Java類描述一個動物;
(2)實例:
class Animal{
?? ?String name;?? ?//成員變量
?? ?String color;
?? ?public Animal(String n,String c){
?? ??? ?name = n;
?? ??? ?color = c;
?? ?}
?? ?public void eat(){
?? ??? ?String name = "老鼠";?? ?//局部變量
?? ??? ?System.out.println(name+"在吃……");
?? ?}
}
?
class Demo1{
?? ?public static void main(String[] args){
?? ??? ?Animal dog = new Animal("狗","白色");//此時在內存中存在兩份name數據
?? ??? ?Animal cat = new Animal("貓","黑色");
?? ??? ?cat.eat();
?? ?}
}
?
存在的問題:
當我們new一個動物cat時,讓cat去調用eat方法,結果顯示的卻是老鼠在吃;
也就是說當存在同名的成員變量與局部變量時,在方法的內部訪問的是局部變量,那是因為Java采取的是就近原則訪問的,要解決這個問題就需要使用this關鍵字;
.this關鍵字的作用:
(1)如果存在同名的成員變量與局部變量時,在方法內部默認是訪問局部變量的數據,可以通過this關鍵字指定訪問成員變量的數據;
(2)在一個構造函數中可以調用另外一個構造函數初始化對象;
5.this關鍵字要注意的事項:
(1)存在同名的成員變量與局部變量時,在方法的內部訪問的是局部變量(Java采取的是“就近原則”的機制訪問的);
(2)如果在一個方法中訪問了一個變量,該變量只存在成員變量的情況下,那么Java編譯器會在該變量的前面添加this關鍵字;
6.this關鍵字調用其他的構造函數要注意的事項:
(1)this關鍵字調用其他的構造函數時,this關鍵字必須要位于構造函數中的第一個語句;
(2)this關鍵字在構造函數中不能出現相互調用的情況,因為是一個死循環;
二.super關鍵字
1. super關鍵字代表了父類空間的引用;
2. super關鍵字的作用:
(1) 子父類存在著同名的成員(包括變量和方法)時,在子類中默認是訪問子類的成員,可以通過super關鍵字指定訪問父類的成員;
(2) 創建子類對象時,默認會先調用父類無參的構造方法,可以通過super關鍵字指定調用父類的構造方法。
(1) 如果在子類的構造方法上沒有指定調用父類的構造方法,那么java編譯器會在子類的構造方法內加上super()語句。
(2) super關鍵字調用父類的構造函數時,該語句必須要是子類構造函數中的第一個語句。
(3) super與this關鍵字不能同時出現在同一個構造函數中調用其他的構造函數。因為兩個語句都需要第一個語句。
(1) 代表的事物不一致。
① super關鍵字代表的是父類空間的引用。(并不能代表對象,只是代表一個對象中的一塊內存而已)
② this關鍵字代表的是所屬函數的調用者對象。
(2) 使用前提不一致。
① super關鍵字必須要有繼承關系才能使用。
② this關鍵字不需要存在繼承關系也可使用。
(3) 調用構造函數的區別:
① super關鍵字是調用父類的構造函數。
② this關鍵字是調用本類的構造函數。
3. super關鍵字調用父類構造方法要注意的事項:
注意:是兩個關鍵字不能同時出現在同一個構造函數中去調用其他的構造函數,里面還是可以寫this.num = num。并不是說不能出現this。
4. super關鍵字與this關鍵字的區別:
.實例:
class Father {
?? ?int x = 1;
?
?? ?Father() {
?? ??? ?System.out.println("這是父類無參的構造方法");
?? ?}
?
?? ?Father(int x) {
?? ??? ?this.x = x;
?? ??? ?System.out.println("這是父類有參的構造方法");
?? ?}
?
?? ?void speak() {
?? ??? ?System.out.println("我是父類");
?? ?}
}
?
class Son extends Father {
?? ?int y = 1;
?? ?Son() {
?? ??? ?System.out.println("這是子類無參的構造方法");
?? ?}
?
?? ?Son(int y) {
?? ??? ?this.y = y+x;
?? ??? ?System.out.println("這是子類帶參的構造方法");
?? ?}
?
?? ?void run() {
?? ??? ?super.speak();?? ?//訪問父類的函數
?? ??? ?System.out.println("我是子類");
?? ?}
}
?
class Demo1{
?? ?public static void main(String[] args) {
?? ??? ?Son s = new Son(3);
?? ??? ?System.out.println(s.y);?? ?//4
?? ?}
}
super關鍵字主要存在于子類方法中,用于指向子類對象中的父類對象;可以訪問父類的屬性、函數以及構造函數。
轉載于:https://www.cnblogs.com/sy130908/p/11429286.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的this关键字+super关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思科CISCO ASA 5521 防火墙
- 下一篇: [POJ3040] Allowance