Java----super 关键字
super关键字
-
基本介绍:
super代表父类的引用,用于访问父类的属性、方法、构造器
-
基本语法:
1、访问父类的属性,但不能访问父类的private属性 如:super.属性名; 2、访问父类的方法,不能访问父类的private方法 如:super.方法名(参数列表); 3、访问父类的构造器(这点前面用过:) super(参数列表);只能放在构造器的第一句,只能出现一句!
-
代码示例:
-
Base类:
package com.jyy.improve_; public class Base {public int n1 = 100;protected int n2 = 200;int n3 = 300;private int n4 = 400; // public Base(){ // System.out.println("父类Base() 构造方法被调用。。。。。。。"); // } public Base(String name , int age){System.out.println("父类 Base(String name , int age) 构造方法被调用。。。。。。");} public int getN4() {return n4;} public void test1(){System.out.println("text01().............");} protected void test2(){System.out.println("text02().......");} void test3(){System.out.println("text03()........");} private void test4(){System.out.println("text04()........");} public void testing(){test4();} }
-
Sub子类:
public class Sub extends Base { public Sub() {super("smith",30);System.out.println("子类Sub()构造方法被调用。。。。。。");} public void sayOk(){System.out.println(super.n1 + " " + super.n2 + " " + super.n3 + " " + getN4());super.test2();super.test3();super.test1();super.testing();} }
-
主函数:
public class ExtendsDetail {public static void main(String[] args) {Sub sub = new Sub();sub.sayOk();} }
-
super关键字的细节
-
调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
-
当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super,this,直接访问是一样的效果!
public void cal(){System.out.println("调用子类的cal()方法。。。。。。。。。。。。。。。。");} public void sum(){cal();this.cal(); // 等价于calsuper.cal(); //直接调用父类的cal() ===>这是与this的区别} 输出: 调用子类的cal()方法。。。。。。。。。。。。。。。。 调用子类的cal()方法。。。。。。。。。。。。。。。。 调用父类的cal()方法。。。。。。。。。。。。。。。
-
super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则。 A - > B - > C