1. super关键字的作用
如果一个类从另一个类继承,我们new这个子类的示例对象的时候,这个子类对象类里面会有一个父类对象,怎么去引用这个父类对象呢?
java中使用super来引用,super是当前对象里面的父对象的引用。
2. super的用法
super在java中有两种用法,下面分别阐述。
2.1 使用super关键字访问父类的成员
1. package cn.galc.test; 2. 3. /** 4. * 父类 5. * @author gacl 6. * 7. */ 8. class FatherClass { 9. public int value; 10. public void f() { 11. value=100; 12. System.out.println("父类的value属性值="+value); 13. } 14. } 15. 16. /** 17. * 子类ChildClass从父类FatherClass继承 18. * @author gacl 19. * 20. */ 21. class ChildClass extends FatherClass { 22. /** 23. * 子类除了继承父类所具有的valu属性外,自己又另外声明了一个value属性, 24. * 也就是说,此时的子类拥有两个value属性。 25. */ 26. public int value; 27. /** 28. * 在子类ChildClass里面重写了从父类继承下来的f()方法里面的实现,即重写了f()方法的方法体。 29. */ 30. public void f() { 31. super.f();//使用super作为父类对象的引用对象来调用父类对象里面的f()方法 32. value=200;//这个value是子类自己定义的那个valu,不是从父类继承下来的那个value 33. System.out.println("子类的value属性值="+value); 34. System.out.println(value);//打印出来的是子类自定义的那个value的值,这个值是200 35. System.out.println(super.value); 36. } 37. } 38. 39. /** 40. * 测试类 41. * @author gacl 42. * 43. */ 44. public class TestInherit { 45. public static void main(String[] args) { 46. ChildClass cc = new ChildClass(); 47. cc.f(); 48. } 49. }
运行结果:
2.2 使用super关键字访问父类的构造方法
子类调用父类构造方法时:super必须放在子类构造方法的第一行,且只能出现一次。
1. class A{ 2. 3. String name; 4. 5. A(){ 6. 7. System.out.println("父类默认隐式的构造方法!"); 8. 9. } 10. 11. 12. 13. A(String name){ 14. 15. System.out.println("父类显式的构造方法!"); 16. 17. } 18. 19. } 20. 21. 22. 23. class B extends A{ 24. 25. 26. 27. B(){ 28. 29. super(null); 30. 31. System.out.println("子类默认隐式的构造方法!"); 32. 33. } 34. 35. } 36. 37. 38. 39. public class Demo10 { 40. 41. public static void main(String[] args) { 42. 43. new B(); 44. 45. } 46. 47. }
输出结果:
父类显式的构造方法!
子类默认隐式的构造方法!
参考链接: