零基础Java学习之super关键字
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关键字相关推荐
- 零基础Java学习之final关键字
final final:最终的,不可更改的 它可以修饰的结构:类.方法.变量 1.修饰类 表示这个类不能被继承,没有子类 final class Eunuch{//太监类} class Son ext ...
- 零基础Java学习之this关键字
this的含义 this代表当前对象的引用(地址值),即对象自己的引用. this可以用于构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁 this用于实例方法中:表示调用该方法 ...
- java学习笔记:零基础java学习路线+配套资料+书籍推荐
公众号菜鸟名企梦2018年,精品文章汇总: 01 我的秋招 我的秋招offer 我的offer选择 秋招全面总结-必读宝典 求职必读 02 零基础学习路线 零基础-java学习路线(上) 零基础-ja ...
- 授人予鱼不如授人予渔:零基础java学习路线分享
一切不以求职找工作为目标的学习路线分享都是耍流氓. 博主是19年7月毕业的应届生:985.A+学科硕士.2018年的秋招收获了:百度.腾讯.头条.美团.猿辅导.度小满.猫眼.流利说等offer.off ...
- 零基础——java学习路线(下)
学习路线分上中下三篇,前两篇已经发布了,本文是学习路线系列的最后一篇.有没有提到的点或学习疑问欢迎评论区留言~ 公众号后台回复"资料"即可获取学习资料大礼包,你想找的基本都有,外加 ...
- 零基础Java学习之继承
继承 继承的概述 继承的理解 继承的好处 继承的格式 继承的特点一:成员变量 私有化(private) 成员变量不重名 成员变量重名 继承的特点二:成员方法 成员方法不重名 成员方法重名--重写(Ov ...
- 零基础Java学习之接口
介绍 接口的介绍我们从三个方面来说: 从使用上来说是继承的一种扩展,因为java不支持多继承,而有了接口就能够实现多继承的效果. 有时候需要必须从几个类中抽取出一些共同的行为特征,而它们之间又没有继承 ...
- 零基础Java学习之多态
介绍 多态是Java的三大特性之一,另外两个分别是:继承和封装(前面博客已经说了继承和封装了,可以看一下).这两个可以说在一定程度了为多态打下了基础. 通过多态,可以实现一个行为具有多种形态,这里的形 ...
- 零基础Java学习之抽象类
抽象类 介绍 抽象:即不具体.或无法具体 例如:当我们声明一个几个图形类:圆.矩形.三角形类等,发现这些类都有共同特征:求面积.求周长.获取图形详细信息.那么这些共同特征应该抽取到一个公共父类中.但是 ...
最新文章
- 由《惊天魔盗团》改编的VR游戏登陆Gear VR
- AIDL 客户端与服务端的双向通信
- GO结构体之间的转换
- 程序员如何日常解决错误问题
- Linux 指令大全(3)
- 3000米排名预测(全排列+判断)
- HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演变过程和优化
- 软件项目管理第二课—项目投标准备工作及投标函
- 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化
- 微软公布 Visual Studio 2020 上半年路线图
- tomcat启动问题
- linux parrot 中文_parrot linux vi/vim命令
- U-Mail邮件服务器详解邮件延时
- 页面常见的布局方式(图解)
- IDEA 强大文件对比功能
- 软工文档-项目开发计划
- 【Axure交互教程】拖动滑块确定评分区间效果
- 插上翅膀,看华为云CDN如何带你网上冲浪
- postgres数据库表空间收缩之pg_squeeze,pg_repack
- html方法介绍,html中noframes标签的使用方法介绍