super关键字
-
基本介绍:
super代表父类的引用,用于访问父类的属性、方法、构造器
-
基本语法:
1、访问父类的属性,但不能访问父类的private属性 如:super.属性名; 2、访问父类的方法,不能访问父类的private方法 如:super.方法名(参数列表); 3、访问父类的构造器(这点前面用过:) super(参数列表);只能放在构造器的第一句,只能出现一句!
-
代码示例:
-
Base类:
javapackage 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子类:
javapublic 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(); } }
-
主函数:
javapublic class ExtendsDetail { public static void main(String[] args) { Sub sub = new Sub(); sub.sayOk(); } }
-
super关键字的细节
-
调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
-
当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super,this,直接访问是一样的效果!
javapublic void cal() { System.out.println("调用子类的cal()方法。。。。。。。。。。。。。。。。"); } public void sum() { cal(); this.cal(); // 等价于cal super.cal(); //直接调用父类的cal() ===>这是与this的区别 } 输出: 调用子类的cal()方法。。。。。。。。。。。。。。。。 调用子类的cal()方法。。。。。。。。。。。。。。。。 调用父类的cal()方法。。。。。。。。。。。。。。。
-
super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则。 A - > B - > C