全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java中的this和super实例浅析

要说this和super就不得不说Java的封装和继承了,首先说封装,这是一种思想,算不上一种技术,核心思想就是将对象的同一行为和状态看成是一个整体,将无需对外界暴露的属性和方法隐藏起来,比如一些方法的具体实现和一些私有的变量,通过公共的方法提供对属性的操作,从而提高安全性。

class Person {
 private String name = "无名氏";//私有的内部成员变量
 private int age = 20;//私有的内部成员变量
 public void sayHello(){//公有的方法,外界可以通过调用这个方法获得需要的功能
  System.out.println("我的名字是"+name+",今年"+age+"了");
 }
 public String getName() {//公有的方法,外界通过操作这个方法获取私有变量值
  return name;
 }
 public void setName(String name) {//公有方法,外界通过操作这个方法设置公有变量的值
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
}

然而这种封装也不是绝对的,当我们需要一些很相似的类的时候,往往希望能够通过一个类派生出许多的拥有共同的特性的类,比如通过动物这个类,派生出猫狗鸡鸭这些类,他们都拥有动物的特性,但是又各有特点。这就是Java中的继承,通过继承,我们可以获得父类所暴露给子类的所有成员,而又可以在父类的基础上构建自己特有的属性。

public class StaticDemo {
 public static void main(String[] args) {
  Student s = new Student();
  s.age = 20;//从父类继承的属性
  s.name = "张同学";
  s.stuNumber = 10;//子类特有的成员变量
  s.sayHello();//从父类继承的方法
  s.study();
 }
}
class Person {
 protected String name = "无名氏";// 子类共享的成员变量
 protected int age = 20;// 子类共享的成员变量
 public void sayHello() {// 公有的方法,外界可以通过调用这个方法获得需要的功能
  System.out.println("我的名字是" + name + ",今年" + age + "了");
 }
}
class Student extends Person {
 public int stuNumber = 20;// 学生特有的学号
 public void study() {// 学生特有的方法,学习
  System.out.println("好好学习!");
 }
}

至此,我们已经大概了解封装和继承,那下面就来看看this和super关键字是什么意思。
super关键字代表的是父类对象,this关键字代表的是当前对象。要理解这些,首先我们要看看子类在创建对象的时候执行了什么。为了方便起见,在此都使用无参构造方法。

编译器找到子类无参构造方法。

执行子类无参构造方法。

在子类无参构造方法的方法体中,第一句代码是隐藏得super();这句代码的意思是执行父类构造方法。

跳转到父类构造方法中,执行父类构造方法,注意,此时子类构造方法并未执行完毕,并且若父类还有父类,则一直执行上一层父类的构造方法,直到找到所有类的祖宗Object类。

将父类的对象的引用存入子类的super中,即子类中的super代表的是父类实体。然而在父类中,super代表的又是父类的父类的实体。

将创建出的当前类的引用存入this。

public class StaticDemo {
 public static void main(String[] args) {
  GirlStudent g = new GirlStudent();
  g.sayName();
 }
}
class Person {
 protected String name = "无名氏";// 子类共享的成员变量
 protected int age = 20;// 子类共享的成员变量
 public void sayHello() {// 公有的方法,外界可以通过调用这个方法获得需要的功能
  System.out.println("我的名字是" + name + ",今年" + age + "了");
 }
}
class Student extends Person {
 public int stuNumber = 20;// 学生特有的学号
 public String name = "张同学";
 public String getSuperName() {//获取当前类的父类名字的方法,对于student是父类,对于girlstudent则是爷爷类
  return super.name;//父类中的super代表的是父类的父类,即student的父类即person类,可以看出子类一旦初始化,将会创建出所有父类对象,一直到object
 }
}
class GirlStudent extends Student{
 public String name = "小红";
 public void sayName(){
  System.out.println("自己的名字是:"+this.name+",父类的名字是:"+super.name+",爷爷类的名字是:"+super.getSuperName());
 }
}

由此可以看出super的用途:用于调用子类隐藏的父类的属性,比如上述代码中的name属性,还有一个比较重要的用途就是用于调用被子类覆写的方法,此时方法名相同,必须使用super才能调用父类的方法。
this的用途:在变量定义不明确时,用来确定调用的具体是哪个变量。

 public void setName(String name){
  this.name=name;
 }

在上面的代码中由于传入的变量也是name,类中本来就存在一个变量也叫name,此时将不明确name是哪个,所以使用this进行区分。

PS:super和this的异同:

super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)

this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)

super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名    super.成员函数据名(实参)

this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)

调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。

super()和this()均需放在构造方法内第一行。

尽管可以用this调用一个构造器,但却不能调用两个。

this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。


# java中this和super  # java  # this  # super  # 举例讲解Java编程中this关键字与super关键字的用法  # java中this与super关键字的使用方法  # 详解Java中super的几种用法并与this的区别  # java this super使用方法详解  # 详解java中this.getClass()和super.getClass()的实例  # Java this()和super()的使用注意  # Java中的构造方法this、super的用法详解  # Java super和this的对比及使用  # 详解Java使用super和this来重载构造方法  # 关于java关键字this和super的区别和理解  # 子类  # 类中  # 的是  # 特有的  # 是一个  # 可以通过  # 第一条  # 时方  # 自己的  # 都是  # 变量名  # 就会  # 也不  # 会有  # 放在  # 又是  # 一句  # 将会  # 在此  # 这就是 


相关文章: 实例解析angularjs的filter过滤器  利用JavaScript实现拖拽改变元素大小  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  电商网站制作价格怎么算,网上拍卖流程以及规则?  高性价比服务器租赁——企业级配置与24小时运维服务  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  一键网站制作软件,义乌购一件代发流程?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何在云主机上快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  c# await 一个已经完成的Task会发生什么  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何在万网开始建站?分步指南解析  如何快速使用云服务器搭建个人网站?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何通过二级域名建站提升品牌影响力?  建站主机是什么?如何选择适合的建站主机?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何快速生成橙子建站落地页链接?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何通过远程VPS快速搭建个人网站?  网站制作公司排行榜,四大门户网站排名?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  网站微信制作软件,如何制作微信链接?  网页设计与网站制作内容,怎样注册网站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  在线教育网站制作平台,山西立德教育官网?  建站之家VIP精选网站模板与SEO优化教程整合指南  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  网站插件制作软件免费下载,网页视频怎么下到本地插件?  盐城做公司网站,江苏电子版退休证办理流程?  网站制作价目表怎么做,珍爱网婚介费用多少?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站之星后台密码如何安全设置与找回?  如何快速上传建站程序避免常见错误?  建站之星导航配置指南:自助建站与SEO优化全解析  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站VPS配置与SEO优化指南:关键词排名提升策略  盘锦网站制作公司,盘锦大洼有多少5G网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  装修招标网站设计制作流程,装修招标流程?  制作网站外包平台,自动化接单网站有哪些?  建站主机系统SEO优化与智能配置核心关键词操作指南  浅谈Javascript中的Label语句  如何配置FTP站点权限与安全设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。