Java中关于变量的几种情况

1、继承时变量的引用关系

class Animals {
int age = 10;
void enjoy() {
System.out.println("Animals enjoy!");
} } class Dogg extends Animals {
int age = 20;
int weight;
void enjoy() {
System.out.println("Dog enjoy!");
}
} public class Test {
public static void main(String[] args) {
Animals a = new Animals();
a.enjoy();
System.out.println(a.age); Dogg d = new Dogg();
d.enjoy();
System.out.println(d.age); Animals d1 = new Dogg();
d1.enjoy();
System.out.println(d1.age);
Dogg s = (Dogg)d1;
System.out.println(s.age); } }

由此可见,父类和子类的变量是同时存在的,即使是同名。

子类中看到的是子类的变量,父类中看到的是父类中的变量。

它们互相隐藏,而同名的方法则是实实在在的覆盖(重写)。

如Animals d1 = new Dogg();

d1即是一个Animals的对象,也是一个Dogg的对象,

那么调用方法时,是根据对象的实际类型调用的,

实际类型是Dogg,所以永远调用子类的方法。

而访问成员变量就不同了,它是Animals时,访问的是父类的成员变量,

转型为Dogg的话,访问的就是子类的成员变量了。

2、Java中的传值调用

public class CallByValue {
Customer c1 = new Customer("张三");
some(c1);
System.out.println(c1.name);//结果是李四 Customer c2 = new Customer("赵六");
other(c2);
System.out.println(c2.name);//结果是赵六 static void some(Customer c){
c.name = "李四";
}
static void other(Customer c){
c = new Customer("王五");//建立新对象指定给c参考,原本参考的对象会被清除
}
}
class Customer{ String name;
public Customer(String name) {
this.name = name;
}
}

Java中只有传值调用,在some方法中,c和c1参考的是同一对象,即c.name修改的是同一对象的变量。

在调用other()方法时,c和c2参考的是同一对象,在c = new Customer("王五")这一句就是要求建立新对象,并指定给c参考,即c和c2变成了两个不同的对象。

Java中关于变量的几种情况的更多相关文章

  1. Java中数组转为List三种情况的优劣对比,常犯的类型转换错误原因解析

    一.最常见方式(未必最佳)通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. 关键代码:List list = Arrays. ...

  2. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  3. java中成员变量,局部变量,静态变量的辨析

    转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...

  4. java中for循环的6种写法

    有些写法上的说明写的过于武断,可能有很多不当之处,仅供参考.   package ForLoop; import java.util.ArrayList; import java.util.Itera ...

  5. Java中的变量与变量的作用域

    关于Java中的变量及变量的作用域 关于Java中的变量及变量的作用域 0. 变量的概念 在程序运行期间,系统可以为程序分配一块内存单元,用来存储各种类型的数据.系统分配的内存单元要使用一个标记符来标 ...

  6. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  7. Java中Compareable和Comparator两种比较器的区别

    Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...

  8. Java中的变量,数据类型和运算符

    变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...

  9. 学习笔记--Java中的变量

    Java中的变量 /** * 关于 Java 语言当中的变量: * * 1. 什么是变量? * - 变量的本质上来说是内存空间,这块空间有(数据类型.名字.字面值) * - 变量包括三部分:数据类型. ...

随机推荐

  1. 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题

    如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知.这种现象听起来很奇怪,下面通过一个示例程 ...

  2. 关于OpenGL游戏全屏模式的设置

    使用DirectX的API的话可以给游戏窗口设置指定的显示器和全屏独占模式,但是如果使用OpenGL的API就比较遗憾不能直接设置. 以下内容基于Windows系统. 如果使用OpenGL渲染,第一步 ...

  3. 02.基于IDEA+Spring+Maven搭建测试项目--详细过程

    一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息 ...

  4. Java参数引用传递之例外:null

    今天写链表的时候写了一个函数,实参是一个空链表,应该是按引用传参,但是在函数内修改了链表,外部的链表没有变化. 原来是null作为参数传递的时候,就不是引用传参了. 引自:http://blog.cs ...

  5. Tengine,轻量级Web服务器

    阿里妹导读:Tengine,轻量级Web服务器,基于Nginx进行开发,针对大访问量网站的需求,新增了很多高级功能和特性.比如,Tengine兼容Nginx的所有配置,并且增加了独立进程框架.页面优化 ...

  6. 【JQuery】JQuery属性

    一.前言         接着上一章的内容,继续本章的学习. 二.内容 $().jquery 返回的字符串包含jquery的版本号 jQuery.fx.interval 改变以毫秒计的动画运行速率 j ...

  7. 3Sum Closest - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 3Sum Closest - LeetCode 注意点 和3Sum那道题的target是0,这道题是题目给定的 要先计算误差再移动指针 解法 解法一:做法 ...

  8. 【bzoj2002】 Hnoi2010—Bounce 弹飞绵羊

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 (题目链接) 题意 数轴上${n}$个点,每个点有一个权值${a_i}$,如果到达这个点,接下 ...

  9. HDU.5692 Snacks ( DFS序 线段树维护最大值 )

    HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...

  10. 构建工具-----Gradle-----安装配置

    介绍 Gradle 是一款构建工具,继 Ant .Maven 之后的现代构建工具. 下载 Gradle 下面是 Gradle 的官方网站地址: Gradle l Modern Open-Source ...