Java 构造方法中super()的作用以及使用
在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句
如下面代码:
class Extends_Demo {public static void main(String[] args) {Cat c = new Cat(); //---------------(1)System.out.println("-------------------");Cat c1 = new Cat("花花",4); //----------------(2)}
}
class Animal {private String color;private int foot;public Animal(){System.out.println("我是父类无参数构造器");}public Animal(String color,int foot){System.out.println("我是父类有参数构造器");this.color = color;this.foot = foot;}
}
class Cat extends Animal{public Cat(){super(); //---------------可以省略System.out.println("我是子类无参数构造器");}public Cat(String color,int foot){ //super(color,foot); //---------------(3)super(); //---------------可以省略System.out.println("我是子类有参数构造器");}
}
输出
这里写图片描述
main方法中
(1)语句执行的是子类的无参数构造方法,内部默认有super(),代表执行父类无参数构造方法,因此输出父类无参数构造方法中的语句和子类无参数构造方法中的语句;
(2)语句执行的是子类有参数构造方法,内部也是默认有super(),代表执行父类无参数构造方法,,输出语句是父类无参数构造方法中的语句和子类有参数构造方法中的语句;
若将(3)语句解除屏蔽,则子类有参构造方法中执行super(color,foot)表示执行父类有参构造方法Animal(color,foot),修改后子类:
class Cat extends Animal{public Cat(){super(); //----------------可以省略System.out.println("我是子类无参数构造器");}public Cat(String color,int foot){ super(color,foot); //---------------(3)//super();System.out.println("我是子类有参数构造器");}
}
输出
对比后可以知道,super()代表执行父类无参数构造方法内容,super(color,foot)代表执行父类有参数构造方法。
Java this()和super()的使用注意
使用super和this应该注意这些:
1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
3)super()和this()均需放在构造方法内第一行。
4)尽管可以用this调用一个构造器,但却不能调用两个。
5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
为什么this或者super要放到第一行?
this() super()是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行,在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。
详细讲解见链接:https://www.jb51.net/article/110674.htm
Java 构造方法中super()的作用以及使用相关推荐
- super在python中是什么意思_python中super()的作用是什么
python中super()的作用是什么 发布时间:2020-08-13 13:59:16 来源:亿速云 阅读:112 作者:小新 这篇文章主要介绍python中super()的作用是什么,文中介绍的 ...
- java中super的作用
super()的作用 super可以用来访问超类的构造方法和被子类所隐藏的方法,如果子类中有方法与超类中的方法名称和参数相同,则超类中的方法就被隐藏起来,也就是说在子类中重载了父类中的方法. 引用父类 ...
- java重载中this的作用_Java2:构造方法、方法重载和this关键字
上一篇博客小编已经给读者介绍了Java入门的类与对象,这一章节我们来了解一下构造方法,方法重载以及this关键字. 一:构造方法 Java中方法一般有2中:普通方法和构造方法.我们已经知道普通方法的声 ...
- java super关键字的作用_详解Java编程中super关键字的用法
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...
- java构造方法中this_Java中this关键字在构造方法中的使用
1. Java中this关键字代表对象本身.用this关键字可以在类的内部调用属性和方法,这样代码的可读性比较高,因为它明确的指出了这个属性或方法的来源. 2. 同时在构造函数中也可以使用this关键 ...
- java parcelable_Android中Parcelable的作用实例解析
这篇文章主要介绍了Android中Parcelable的作用,对于Android初学者有一定的参考学习价值,需要的朋友可以参考下 在android提供了一种类型:Parcel.被用作封装数据的容器,封 ...
- java编程里的values怎么使用,详解Java编程中super关键字的用法
这篇文章主要介绍了Java编程中this与super关键字的用法,包括从内存结构方面分析super的作用域,需要的朋友可以参考下 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程 ...
- Java 泛型中? super T和? extends T的区别
原文链接 李璟(jlee381344197@gmail.com) 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思 ...
- java 构造方法的理解及作用
构造方法是什么? 通俗易懂的说,构造方法就是项目中的实体类里面有参构造和无参构造 //有参构造public Billing(String msisdn, String serviceid, Strin ...
最新文章
- R操作MySQL数据库创建表、删除表、增删改查(CRUD)
- 微信分享,二次分享(移动web端)
- eclipse-python插件。如果online update的话,经常会失败,所以offline比较靠谱
- Codeforces Round#433 简要题解
- Python入门100题 | 第054题
- /dev/tcp 的简单应用
- 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
- 在JShell中尝试Java9 HTTP客户端和Process API
- 切记!这样洗头最伤身
- Android逆向笔记-通过tracerPid对抗IDA调试
- mysql脚本中如何写判断_mysql中如何写判断语句
- Java经典算法50道题
- Recoil是React新的“Redux”吗?
- 三、Nginx内置变量
- 数学一年级应用题_【专项练习】一年级下册数学100以内加减法应用题专项练习,附答案...
- 孙鑫VC学习笔记:第十四讲 (二) 网络编程
- MFC开发wps演示
- 如何从水经注万能地图下载器35款地图中选择合适的地图下载
- win10很多软件显示模糊_win10系统字体模糊的解决方法
- data uploads php权限,【网站安全】取消data、uploads等有执行.php的权限
热门文章
- CSS 文字处理总结
- 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat
- 【C/C++】将二个有序数组合并
- 【C/C++】lib 和 dll 的区别、生成以及使用详解
- AVCDecoderConfiguration语法格式分析
- C/S框架-发布和部署WebService
- 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter
- linux服务安装框架,CentOS7安装经典Web架构:LAMP
- Matlab常用函数流水账
- 如何让hybris启动加快