Java面向对象之关键字super 入门实例
一、基础概念
(一)super关键字
super关键字的用法和this相似。this代表的是当前对象。super代表的是父类中内存空间。
子父类中是不会出现同名属性的情况。
(二)继承中、成员变量问题
当成员变量中出现了同名的局部变量,用关键字 this来区分。当父类中出现了同名的成员变量,用关键字 super来区分
(三)继承中,成员函数问题
1、子父类中出现一样的方法(返回值类型、函数名、参数列表等都一样),创建子类对象调用该方法时,运行的是子类中的方法。
2、这种情况称之为函数的另一个特性----(override)覆盖、重写、复写。
3、注意:
子类覆盖父类权限必须大于等于父类的权限。
覆盖中,静态只能覆盖静态,或者被静态覆盖。
(四)继承中,构造函数问题
1、创建子类对象,父类中的构造函数也会运行的原因:子类的所有构造函数中的第一行,都有一个默认访问父类中空参数的构造函数super();
2、调用本类中的构造函数使用this([实参列表])语句。调用父类中的构造函数用super([实参列表])语句。
3、子类实例化的过程,必须先执行父类中的初始化的原因:子类继承了父类中的内容,所以子类在实例化时,必须要先执行父类中的内容。
4、注意:
如果父类中没有空参数的构造函数时,子类的构造函数必须通过super语句指定要访问的父类中的构造函数。
this()语句和super()语句都必须出现在构造函数的第一行。因为初始化的动作要先执行。所以this()语句和super()语句只能存在一个。
二、实例代码(一)
1 class Fu //默认继承 object2 {
3 int num = 4;
4 public void show()
5 {
6 System.out.println("父类中的成员函数show ......" );
7 }
8 Fu()
9 {
10 //默认存在语句superz();
11 //显示初始化。
12 //构造代码块初始化。
13 System.out.println("父类中的构造函数Fu ......");
14 }
15 Fu(int x)
16 {
17 //默认存在语句super();
18 System.out.println("父类中的构造函数Fu ......"+x);
19 }
20 }
21 class Zi extends Fu
22 {
23 //子类和父类的成员变量一样的情况
24 int num = 5;
25 //子类和父类的成员函数一样的情况,进行了覆盖
26 public void show()
27 {
28 //局部变量与成员变量也一样的情况
29 int num = 6;
30 System.out.println("子类中的成员函数show ...... ");
31
32 System.out.println("num = "+num);//输出子类中局部变量num的值
33 System.out.println("num = "+this.num);//输出子类中成员变量num的值
34 System.out.println("num = "+super.num);//输出父类中成员变量num的值
35 }
36 //子类和父类的构造函数一样的情况。子类和父类的语句都执行。
37 Zi()
38 {
39 //默认存在语句super();
40
41 System.out.println("子类中的构造函数zi ......" );
42 }
43 Zi(int x)
44 {
45 //默认存在语句super();
46 super(8);//显示指定super的方式来访问父类中的构造函数。必须定义在第一行
47 System.out.println("子类中的构造函数Zi ......"+x);
48 }
49 }
50 class SuperDemo
51 {
52 public static void main(String[] args)
53 {
54 Zi z1 = new Zi();
55 z1.show();
56 Zi z2 = new Zi(5);
57 z2.show();
58 }
59 }
代码运行
(三)、实例代码(二)
1 class Person2 {
3 private String name;
4 private int age;
5
6 //父类Person的构造函数
7 Person(String name,int age)
8 {
9 this.name = name;
10 this.age = age;
11 }
12 public void setName(String name)
13 {
14 this.name = name;
15 }
16 public void setAge(int age)
17 {
18 this.age = age;
19 }
20 public String getName()
21 {
22 return name;
23 }
24 public int getAge()
25 {
26 return age;
27 }
28 }
29 //Student继承Person
30 class Student extends Person
31 {
32 Student(String name,int age)
33 {
34 super(name,age);//用super调用父类Person的构造函数。
35 }
36 public void study()
37 {
38 System.out.println("name: "+this.getName()+" age: "+this.getAge()+" study ......");
39 }
40 }
41 //Worker继承Person
42 class Worker extends Person
43 {
44 Worker (String name,int age)
45 {
46 super(name,age);////用super调用父类Person的构造函数。
47 }
48 public void work()
49 {
50 System.out.println("name: "+this.getName()+" age: "+this.getAge()+" work ......");
51 }
52 }
53 class SuperDemo1
54 {
55 public static void main(String[] args)
56 {
57 Student p1 = new Student("xiaohong",18);
58 p1.study();
59 Worker p2 = new Worker("xiaoming",32);
60 p2.work();
61 }
62 }
代码运行
以上是 Java面向对象之关键字super 入门实例 的全部内容, 来源链接: utcz.com/z/393972.html