super关键字小结(构造方法的执行是不是一定会创建对象?)
1.父类
public class Person {
private String name = "李四";
private int age;
public Person() {
System.out.println("Person的构造方法执行了!");
System.out.println(this.getClass().hashCode());
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
2.子类
public class Student extends Person {
private double mark;
private int num;
private String name = "赵六";
public Student() {
// 系统会默认有一个super();
super();
System.out.println("Student的构造方法执行了");
System.out.println(this.getClass().hashCode());
}
public Student(double mark, int num) {
// super可以用在构造函数中,为了代码的重复利用,还可以初始化从父类继承过来的属性
super("张三", 10);
this.mark = mark;
this.num = num;
}
public void study() {
System.out.println(super.getName() + "在学习!");
}
// ==================================================================
public double getMark() {
return mark;
}
public int getNum() {
return num;
}
public void setMark(double mark) {
this.mark = mark;
}
public void setNum(int num) {
this.num = num;
}
}
3.测试类:
public class Test {
public static void main(String[] args) {
/**
* 在创建子类对象的时候会先调用父类的构造方法
* 调用父类的构造方法仅仅是为了给继承过来的父类属性初始化而已,并不会创建父类对象!
*/
Student student1 = new Student();
Student student2 = new Student(100.0, 001);
student2.study();
}
}
在此,我也翻了很多论坛,调用构造方法并不一定会创建对象,new 的时候才一定会创建对象,,也就是构造方法的执行不一定会创建对象
super跟this不同,this是一个引用,是一个地址,而super仅仅代表父类的特征,特征,特征
===================================================================================
更新时间:2017年12月21日22:06:48 ------->构造方法的执行并不一定会创建对象例证:
1.抽象父类:
public abstract class AbstractObject {
public AbstractObject() {
System.out.println("抽象类的构造方法执行了!");
}
}
2.子类:
public class SomeObject extends AbstractObject {
public SomeObject() {
System.out.println("子类的构造方法执行了!");
}
}
3.测试类:
public class Test01 {
public static void main(String[] args) {
// 抽象类无法new对象
// AbstractObject obj = new AbstractObject();
SomeObject obj = new SomeObject();
}
}
4.执行结果:
抽象类的构造方法执行了!
子类的构造方法执行了!
结论:众所周知抽象类是不能够创建对象的,可见父类的构造方法执行了,但是不会创建父类的对象,突发奇想,特来mark一下
super关键字小结(构造方法的执行是不是一定会创建对象?)的更多相关文章
- Java之构造方法及this、super关键字
有关构造方法的理解: 需要对对象的数据进行初始化,则创建一个构造方法,此方法名字和类名一样,但是没有返回值(类型和具体的值都没,但是可以写return;).构造方法是用来创建对象的,所以是不能被对象调 ...
- Class的使用,构造方法,实例属性和实例方法,静态属性和静态方法,this和super关键字,类的继承
s6新增了一种定义对象实例的方法,Class(类)这个概念,作为对象的模板.class可以看作只是一个语法糖,通过class关键字,可以定义类.让对象原型的写法更加清晰.更像面向对象编程的语法. 一. ...
- Java基础-super关键字与this关键字
用super调用父类构造方法 类如果没有显式声明构造方法,则自动生成无参数的默认构造方法. 1.先用一个无参数的父类构造方法验证一下, 执行子类构造方法会自动调用父类的构造方法.测试代码: class ...
- java中关于类的封装与继承,this、super关键字的使用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...
- this关键字、访问修饰符、super关键字
this关键字.访问修饰符.super关键字 Java关键字this只能用于方法方法体内,而且只能用在非静态方法内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个 ...
- 8.8.1 Super关键字
Super关键字 1.super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象. 2.super代表的是当前子类对象中的父类型特征. //通过子类的构造方法去调用父类的构造 ...
- JAVA面向对象-----super关键字
JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- es6 super关键字
rhttp://es6.ruanyifeng.com/#docs/class-extends super关键字,既可以当作函数使用,也可以当作对象使用.这俩种的使用是不一样的 第一种:函数使用 代表父 ...
随机推荐
- (简单实用)Android支付宝商家收款语音播报
支付宝商家收款时,语音提示:支付宝收款xxx元,当时觉得这东西还挺有趣的,第一时间通知给商家,减少不必要的纠纷,节约时间成本,对商家对用户都挺好的. 在商家版有这样收款播报的功能,我觉得挺好的. 对列 ...
- PHP判断上传图片的类型
PHP判断上传图片的类型用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠 同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话 ...
- 哈希--Hash,“散列”/“哈希”
哈希 Hash,翻译“散列”,音译为“哈希”,把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散 ...
- [SVN] - 使用 TortoiseSVN 进行文件比对非常慢 之 解决
背景 Windows 10 + TortoiseSVN-v1.9.7使用默认的 TortoiseMerge 进行文件比对,打开速度非常非常慢. 解决 禁用 TortoiseMerge / Settin ...
- [Oracle] - 使用 DBMS_UTILITY 查看异常详情
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE说明:这是在Oracle 10g数据库引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE内置函数返回一 ...
- Python 发送微信小程序的模板消息
在小程序的开发过程中,会存在模板消息的发送,具体文档见 这里,模板消息的发送是和语言无关的,这里将简要写一下怎么用 Python 给用户发送模板消息. 通过文档可以知道,发送的时候,需要使用小 ...
- Mybatis笔记1
Mybatis 持久层框架,数据访问层 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建sta ...
- 第四章 函数之lambda 表达式和内置函数
4.5 lambda 表达式 用于表示简单的函数. # 三元运算,为了解决简单的if else的情况,如:if 1 == 1: a = 123else: a = 456# 相当于a = 1 ...
- [tomcat] 连接池参数maxActive、maxIdle 、maxWait 等
maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接.设 0 为没有限制.maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数 ...
- 简单理解JavaScript原型链
简单理解原型链 什么是原型 ? 我是这样理解的:每一个JavaScript对象在创建的时候就会与之关联另外一个特殊的对象,这个对象就是我们常说的原型对象,每一个对象都会从原型"继承" ...