super

父类空间优先于子类对象产生

在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构造方法调用时,一定先调用父类的构造方法。

public class Person {private String name;private int age;//其他代码省略
}
public class Student extends Person{private int score;//其他成员方法省略
}
public class Test{public static void main(String[] args){Student stu = new Student();}
}

super和this的含义

  • super :代表父类的存储空间标识(可以理解为父亲的引用)。

    • 通过super找成员变量和成员方法时,直接从父类空间(包含父类的父类继承的)找
    • super()或super(实参列表)只能从直接父类找
    • 通过super只能访问父类在子类中可见的(非private,跨包还不能是缺省的)
  • this :代表当前对象的引用

    • 通过this找成员变量和成员方法时,先从当前类中找,没有的会往上找父类的。
    • 但是this()或this(实参列表)只会在本类中找

注意:super和this都不能出现在静态方法和静态代码块中,因为super和this都是存在与对象中的

super的用法

1、super.成员变量

在子类对象中访问父类空间的成员变量,即访问从父类继承的在子类中仍然可见的成员变量

(1)子类没有与父类重名的成员变量

public class Test{public static void main(String[] args){Son s = new Son();s.test();}
}
class Father{int a = 10;
}
class Son extends Father{public void test(){System.out.println(super.a);//10System.out.println(this.a);//10System.out.println(a);//10}
}

(2)子类有与父类重名的成员变量

public class Test{public static void main(String[] args){Son s = new Son();s.test();}
}
class Father{int a = 10;
}
class Son extends Father{int a = 20;public void test(){System.out.println(super.a);//10System.out.println(this.a);//20System.out.println(a);//20}
}

(3)方法有局部变量与成员变量重名

public class Test{public static void main(String[] args){Son s = new Son();s.test(30);}
}
class Father{int a = 10;
}
class Son extends Father{int a = 20;public void test(int a){System.out.println(super.a);//10System.out.println(this.a);//20System.out.println(a);//30}
}

2、super.成员方法

在子类对象中访问从父类继承的在子类中仍然可见的成员方法

(1)子类没有重写方法

public class Test{public static void main(String[] args){Son s = new Son();s.test();}
}
class Father{public void method(){System.out.println("aa");}
}
class Son extends Father{public void test(){method();//aathis.method();//aasuper.method();//aa}
}

(2)子类重写父类的方法

public class Test{public static void main(String[] args){Son s = new Son();s.test();}
}
class Father{public void method(){System.out.println("aa");}
}
class Son extends Father{public void method(){System.out.println("bb");}public void test(){method();//bbthis.method();//bbsuper.method();//aa}
}

3、super()或super(实参列表)

this(...)        --    本类的构造方法
super(...)      --    父类的构造方法

子类的每个构造方法中均有默认的super(),调用父类的空参构造。
手动调用父类构造会覆盖默认的super()。

super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。

零基础Java学习之super关键字相关推荐

  1. 零基础Java学习之final关键字

    final final:最终的,不可更改的 它可以修饰的结构:类.方法.变量 1.修饰类 表示这个类不能被继承,没有子类 final class Eunuch{//太监类} class Son ext ...

  2. 零基础Java学习之this关键字

    this的含义 this代表当前对象的引用(地址值),即对象自己的引用. this可以用于构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁 this用于实例方法中:表示调用该方法 ...

  3. java学习笔记:零基础java学习路线+配套资料+书籍推荐

    公众号菜鸟名企梦2018年,精品文章汇总: 01 我的秋招 我的秋招offer 我的offer选择 秋招全面总结-必读宝典 求职必读 02 零基础学习路线 零基础-java学习路线(上) 零基础-ja ...

  4. 授人予鱼不如授人予渔:零基础java学习路线分享

    一切不以求职找工作为目标的学习路线分享都是耍流氓. 博主是19年7月毕业的应届生:985.A+学科硕士.2018年的秋招收获了:百度.腾讯.头条.美团.猿辅导.度小满.猫眼.流利说等offer.off ...

  5. 零基础——java学习路线(下)

    学习路线分上中下三篇,前两篇已经发布了,本文是学习路线系列的最后一篇.有没有提到的点或学习疑问欢迎评论区留言~ 公众号后台回复"资料"即可获取学习资料大礼包,你想找的基本都有,外加 ...

  6. 零基础Java学习之继承

    继承 继承的概述 继承的理解 继承的好处 继承的格式 继承的特点一:成员变量 私有化(private) 成员变量不重名 成员变量重名 继承的特点二:成员方法 成员方法不重名 成员方法重名--重写(Ov ...

  7. 零基础Java学习之接口

    介绍 接口的介绍我们从三个方面来说: 从使用上来说是继承的一种扩展,因为java不支持多继承,而有了接口就能够实现多继承的效果. 有时候需要必须从几个类中抽取出一些共同的行为特征,而它们之间又没有继承 ...

  8. 零基础Java学习之多态

    介绍 多态是Java的三大特性之一,另外两个分别是:继承和封装(前面博客已经说了继承和封装了,可以看一下).这两个可以说在一定程度了为多态打下了基础. 通过多态,可以实现一个行为具有多种形态,这里的形 ...

  9. 零基础Java学习之抽象类

    抽象类 介绍 抽象:即不具体.或无法具体 例如:当我们声明一个几个图形类:圆.矩形.三角形类等,发现这些类都有共同特征:求面积.求周长.获取图形详细信息.那么这些共同特征应该抽取到一个公共父类中.但是 ...

最新文章

  1. 由《惊天魔盗团》改编的VR游戏登陆Gear VR
  2. AIDL 客户端与服务端的双向通信
  3. GO结构体之间的转换
  4. 程序员如何日常解决错误问题
  5. Linux 指令大全(3)
  6. 3000米排名预测(全排列+判断)
  7. HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演变过程和优化
  8. 软件项目管理第二课—项目投标准备工作及投标函
  9. 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化
  10. 微软公布 Visual Studio 2020 上半年路线图
  11. tomcat启动问题
  12. linux parrot 中文_parrot linux vi/vim命令
  13. U-Mail邮件服务器详解邮件延时
  14. 页面常见的布局方式(图解)
  15. IDEA 强大文件对比功能
  16. 软工文档-项目开发计划
  17. 【Axure交互教程】拖动滑块确定评分区间效果
  18. 插上翅膀,看华为云CDN如何带你网上冲浪
  19. postgres数据库表空间收缩之pg_squeeze,pg_repack
  20. html方法介绍,html中noframes标签的使用方法介绍

热门文章

  1. 【 Linux 】创建一个文件夹并在此文件下创建一个c源文件
  2. FPGA从Xilinx的7系列学起(3)
  3. JavaScript工作原理(二):V8引擎和5招高效代码
  4. 【SharePoint】设置站点通讯组
  5. Java类中的权限修饰符
  6. win 开机 Microsoft corparation 滚动栏
  7. java_有返回值线程_提前加载例子
  8. html 整个页面变灰
  9. 跑步机到了,看能坚持多久
  10. JavaScript入门(一)