文档章节

Java构造器使用注意

咸鱼AI
 咸鱼AI
发布于 07/19 17:28
字数 589
阅读 5
收藏 0
	public class 父类A {
		int age = 10;
		protected void say() {
		System.out.println("父类A");
		}
		public 父类A() {
		override();
		}
		public void override() {
		System.out.println("父类A override");
		}
		}
		class 子类B extends 父类A {
		int age = 9;
		private final Date date;
		public 子类B() {
		date = new Date();
		}
		@Override
		public void override() {
		System.out.println(date);
		}
		@Override
		protected void say() {
		System.out.println("子类B");
		}
		public static void main(String[] args) {
		父类A b = new 子类B();
		子类B.override();


		}
		}

注意一:

在使用 new 来创建对象的时候,会先检查该类是否继承自父类,如果是,则会先调用父类的构造方法,该案例中,在 new 子类B() 时,发现 子类B 是 父类A 的子类,于是先调用  父类A  的构造方法,在 父类A 构造方法中,发现调用了 override 方法,于是又去寻找子类 子类B 是否重写了 override 方法,发现该子类重写了,则调用子类的 override,打印出 date,而此时 date 还未被初始化,所以值为 null。  在父类的构造方法执行完毕后,再执行子类的构造方法,此时 date 被初始化了,所以再次调用 override 方法时,则会正确打印出 date。

调用方法时,会优先在子类中寻找对应方法,如果子类中不存在,才会去调用父类中方法。

注意二:

当调用 子类B.age,会打印出什么呢?是 10 还是 9 ?

结果是打印出 10,创建对象的时候,实例变量有两种类型,前面是声明类型,后面是实际类型

父类A b = new 子类B();

b 的声明类型为 父类A,实际类型为 子类B。

当调用成员变量的时候,会先在声明类型中寻找该变量,如果该变量存在,则使用声明类型中的变量值,如果不存在,则在实际类型中去寻找该变量。

总结:

调用成员变量的时候,会先在声明类型中寻找该变量,如果该变量存在,则使用声明类型中的变量值,如果不存在,则在实际类型中去寻找该变量。

调用方法的时候,优先在子类中寻找对应方法,如果子类中不存在,再调用父类中方法。

© 著作权归作者所有

共有 人打赏支持
咸鱼AI

咸鱼AI

粉丝 3
博文 6
码字总数 3338
作品 0
闵行
程序员
私信 提问
scala特点和java的异同点

1、Scala是纯粹的面向对象语言,相比java在scala中+都是方法 2、Scala先调用java中string对象中toInt方法是发现没有,它会将java的String对象隐式转换成Scala中的RichString对象,RichStrin...

如风达
2015/08/17
0
0
阿里P8技术心得:java反射机制的核心原理

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构
11/25
0
0
【Java并发性和多线程】Java同步块

本文为转载学习 原文链接:http://tutorials.jenkov.com/java-concurrency/synchronized.html 译文链接:http://ifeve.com/synchronized-blocks/ Java 同步块(synchronized block)用来标记......

heroShane
2014/01/28
0
0
Java核心机制:反射机制的原理及应用方法

一、java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): 1、Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在...

Java架构资源分享
11/25
0
0
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义
06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对接比特币钱包的PHP开发包

BtcTool是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性: 利用第三方服务获取指定地址的utxo集合 离线生成消费裸...

汇智网教程
2分钟前
0
0
【自用】 VHD to VHDX

VHDX: 在VHD 2TB 的基础上提供 64TB的容量。 支持逻辑扇区大小为 4KB,和每块的大小为 256MB,来优化虚拟磁盘性能。 比VHD提供更高的安全性、可靠性和性能。 convert-VHD –path d:\Hyper-v...

Tensor丨思悟
15分钟前
0
0
30 岁转行做Python开发晚吗?而且是零基础

最近有小伙伴问小编,30 岁转行做Python开发晚吗? 小编想说,其实无论男女,只要想学,有这个动力,就直接去行动。无论年龄,无论性别,只要你想一直勇往直前,那么想做的就去做吧~这里有一...

糖宝lsh
25分钟前
7
0
详解Spring中的Profile

前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际现网的配置参数与测试服务器参数混淆...

watermelon11
40分钟前
4
0
phper必知必会(二)

  1.说说你对进程,线程以及协程的理解      进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程是程序基本执行的实体。进程与进程之间是独立的,拥有完全独立...

SEOwhywhy
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部