当前位置: 首页 > news >正文

【Java】super 关键字用法

目录

this与super区别

1.访问成员变量-示例代码

继承中构造方法的访问特点

2.访问构造方法-示例代码:

继承中成员方法访问特点

3.访问成员方法-示例代码:


super 关键字的用法和 this 关键字相似

  • this : 代表本类对象的引用
  • super : 代表父类存储空间的标识(可以理解为父类对象的引用)

this与super区别

关键字访问成员变量访问构造方法访问成员方法
thisthis.成员变量(访问本类的成员变量)this(...)(访问本类的构造方法)this.成员方法()
(访问本类的成员方法)
supersuper.成员变量(访问父类的成员变量)super(...)(访问父类的构造方法)super.成员方法()
(访问父类的成员方法)

1.访问成员变量-示例代码

Student.java

package com.面向对象.Demo6;public class Student extends Parent {public String name = "xiaojun";public int age = 21;public void show() {int age = 18;System.out.println("访问当前方法中局部变量学生年龄age:" + age);System.out.println("访问当前子类中的学生年龄age:" + this.age);System.out.println("访问当前父类中的学生年龄age:" + super.age);}
}

Parent.java

package com.面向对象.Demo6;public class Parent {public int height = 175;public int age = 24;public int weight = 110;
}

Demo.java

package com.面向对象.Demo6;public class Demo {public static void main(String[] args) {Student student = new Student();student.show(); }
}

运行结果:


继承中构造方法的访问特点

  • 子类中所有的构造方法默认都会访问父类中的无参的构造方法
  • 因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化之前,需要对父类进行初始化
  • 每个子类构造方法的第一句默认都是: super()

如果父类中没有无参构造方法,只能带参构造方法,怎么办?

  • 通过super 关键字显示调用父类的有参构造方法
  • 父类中自己单独定义一个无参构造方法

2.访问构造方法-示例代码:

Parent.java

package com.面向对象.Demo7;public class Parent {/*** 父类中不写无参构造方法,子类中只能使用super调用有参构造方法*/
//    public Parent() {
//        System.out.println("父类中的无参构造方法");
//    }public Parent(int age){System.out.println("父类中的有参构造方法");}
}

Student.java

package com.面向对象.Demo7;public class Student extends Parent{/*** 构造方法——给对象属性赋值* 子类中的无参/有参构造方法 必须可以访问到父类中的无参/有参构造方法,否则报错*/public Student() {
//        super(); // 访问我们父类中的 无参构造方法,默认第一句是有super()的,super(20); //调用我们父类中的 有参构造方法(有了这一句,父类中的无参构造方法将不会被调用)System.out.println("学生类无参构造方法");}public Student(int age) {
//        super(); //默认访问父类中的无参构造方法super(21);// 如果父类中没有无参构造方法,这里就只能调用父类中的 有参构造方法System.out.println("学生类有参构造方法");}
}

StudentDemo.java

package com.面向对象.Demo7;public class StudentDemo {/*** 我们子类中的所有构造函数(方法)都会默认的访问父类中的 无参构造方法* @param args*/public static void main(String[] args) {Student student1 = new Student(); // 执行学生类的无参构造方法Student student2 = new Student(21); // 执行学生类的有参构造方法}
}

运行结果:

继承中成员方法访问特点

通过子类对象访问一个方法

  1. 子类成员范围找
  2. 父类成员范围找

如果还找不到就报错(不考虑父类的父类)

3.访问成员方法-示例代码:

Parent.java

package com.面向对象.Demo8;public class Parent {public void mayikt(){System.out.println("父类中的mayikt方法");}
}

Student.java

package com.面向对象.Demo8;public class Student extends Parent{public void mayikt(){super.mayikt(); //调用父类中的 mayikt 方法System.out.println("子类中的mayikt方法");}
}

StudentDemo.java

package com.面向对象.Demo8;public class StudentDemo {public static void main(String[] args) {Student student = new Student();student.mayikt(); // 父类中的mayikt方法// 子类中的mayikt方法}/*** 上面调用的mayikt方法* 1.子类中查找mayikt方法* 2.父类中查找mayikt方法* 3.父类中没有mayikt方法 报错了!(不考虑父类的父类)*/
}

下一篇文章:方法重写

http://www.lryc.cn/news/180439.html

相关文章:

  • 前端笔试题总结,带答案和解析
  • Omniverse Machinima
  • 【测试人生】游戏业务测试落地精准测试专项的一些思路
  • Redis 数据类型底层原理
  • EasyEdge 智能边缘控制台通过sdk发布应用
  • centos软件设置开机启动的方式
  • 二叉树和堆
  • 洛谷P5732 【深基5.习7】杨辉三角题解
  • Docker 精简安装 Nacos 2.2.1 单机版本
  • IntelliJ IDEA配置Cplex12.6.3详细步骤
  • 2023 年最佳多 GPU 深度学习系统指南
  • Kotlin异常处理runCatching,getOrNull,onFailure,onSuccess(1)
  • 【深入探究人工智能】:历史、应用、技术与未来
  • 【设计模式】五、原型模式
  • day36-注解
  • 【C语言数据结构——————栈和队列4000字详解】
  • 电子地图 | VINS-FUSION | 小觅相机D系列
  • C++goto语句
  • Spring学习笔记11 GoF代理模式
  • 代码随想录二刷 Day23
  • Ubuntu `apt` 报错 “Errors were encountered while processing: base-passwd“ 的解决方法
  • XXL-JOB分布式任务调度
  • 加拿大人工智能数据搜索平台【Secoda】完成1400万美元A轮融资
  • less与sass
  • c-const修饰指针-day16
  • 已解决: Go Error: no Go files in /path/to/directory问题
  • 2022年6月和7月的工作经历
  • 【图像处理】SIFT角点特征提取原理
  • flutter开发实战-应用更新apk下载、安装apk、启动应用实现
  • DispatcherServlet初始化之Spring容器创建1.0