例1:
package com.oop.demo05; //定义一个Person父类 public class Person { protected String name="小明"; } /* super关键字可访问父类的成员、成员方法和构造方法 */ //定义Boy类继承Person类 class Boy extends Person{ private String name="小红"; public void test(String name){ System.out.println(name); //输出张三 System.out.println(this.name); //输出小红 System.out.println(super.name); //输出小明 } } package com.oop.demo05; import com.oop.demo01.Student; //定义一个测试类 public class App { public static void main(String[] args) { Boy boy = new Boy(); //实例化Boy对象 boy.test("张三"); } }
输出:
例2:
1 package com.oop.demo05; 2 3 //定义一个Person父类 4 public class Person { 5 protected String name="小明"; 6 public void print(){ 7 System.out.println("Person"); 8 } 9 } 10 /* 11 super关键字可访问父类的成员、成员方法和构造方法 12 */ 13 14 //定义Boy类继承Person类 15 class Boy extends Person{ 16 //private String name="小红"; 17 //定义一个print方法 18 public void print(){ 19 System.out.println("Boy"); 20 } 21 22 public void test1(){ 23 print(); //this.print()=print(),this省略了,调用自己的方法 24 this.print(); //调用自己的方法 25 super.print();//调用父类的print方法 26 27 } 28 29 30 // public void test(String name){ 31 // System.out.println(name); //输出张三 32 // System.out.println(this.name); //输出小红 33 // System.out.println(super.name); //输出小明 34 } 35 36 37 38 package com.oop.demo05; 39 40 import com.oop.demo01.Student; 41 //定义一个测试类 42 public class App { 43 public static void main(String[] args) { 44 Boy boy = new Boy(); //实例化Boy对象 45 //boy.test("张三"); 46 boy.test1(); 47 48 49 } 50 }
输出:
例3:无参构造方法的继承
1 package com.oop.demo05; 2 3 //定义一个Person父类 4 public class Person { 5 protected String name="小明"; 6 7 public Person() { 8 System.out.println("调用父类Person的无参构造"); 9 } 10 11 // public void print(){ 12 // System.out.println("Person"); 13 // } 14 } 15 /* 16 super关键字可访问父类的成员、成员方法和构造方法 17 */ 18 19 //定义Boy类继承Person类 20 class Boy extends Person{ 21 //private String name="小红"; 22 //定义一个print方法 23 24 25 public Boy() { 26 super(); 27 /* 28 super();原本是隐藏的,可不写 29 调用父类的构造器,必须放在子类构造器的第一行 30 */ 31 System.out.println("调用了子类Boy的无参构造"); 32 } 33 34 // public void print(){ 35 // System.out.println("Boy"); 36 // } 37 38 // public void test1(){ 39 // print(); //this.print()=print(),this省略了,调用自己的方法 40 // this.print(); //调用自己的方法,输出Boy 41 // super.print();//调用父类的print方法 42 // 43 // } 44 45 46 // public void test(String name){ 47 // System.out.println(name); //输出张三 48 // System.out.println(this.name); //输出小红 49 // System.out.println(super.name); //输出小明 50 } 51 52 53 54 package com.oop.demo05; 55 56 import com.oop.demo01.Student; 57 //定义一个测试类 58 public class App { 59 public static void main(String[] args) { 60 Boy boy = new Boy(); //实例化Boy对象 61 //boy.test("张三"); 62 //boy.test1(); 63 64 65 } 66 }
输出:
super注意点:
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类方法或者构造方法中
3.super和this不能同时调用构造方法
和this的异同:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:不用继承也可以使用
super:只能在继承中使用
构造方法
this():可调用本类的构造
super():可调用父类的构造