Java中关于变量的几种情况
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中关于变量的几种情况的更多相关文章
- Java中数组转为List三种情况的优劣对比,常犯的类型转换错误原因解析
一.最常见方式(未必最佳)通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. 关键代码:List list = Arrays. ...
- java中的变量和数据类型
变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...
- java中成员变量,局部变量,静态变量的辨析
转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...
- java中for循环的6种写法
有些写法上的说明写的过于武断,可能有很多不当之处,仅供参考. package ForLoop; import java.util.ArrayList; import java.util.Itera ...
- Java中的变量与变量的作用域
关于Java中的变量及变量的作用域 关于Java中的变量及变量的作用域 0. 变量的概念 在程序运行期间,系统可以为程序分配一块内存单元,用来存储各种类型的数据.系统分配的内存单元要使用一个标记符来标 ...
- java中static变量和方法的总结
转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...
- Java中Compareable和Comparator两种比较器的区别
Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...
- Java中的变量,数据类型和运算符
变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...
- 学习笔记--Java中的变量
Java中的变量 /** * 关于 Java 语言当中的变量: * * 1. 什么是变量? * - 变量的本质上来说是内存空间,这块空间有(数据类型.名字.字面值) * - 变量包括三部分:数据类型. ...
随机推荐
- C# 键盘记录器
设计背景 Win系统带有API可以获取键入值,本小程序主要应用了一个网上广为流传的类,可以说一个测试DEMO.有俗称为键盘钩子 设计思路 使用Win API获取建入值 相关技术 Win API 功能 ...
- ansible操作(一)
ansible晋级操作之ad-hoc命令 所谓的ad-hoc命令! 如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令.Ansib ...
- JUnit中按照顺序执行测试方式
很多情况下,写了一堆的test case,希望某一些test case必须在某个test case之后执行.比如,测试某一个Dao代码,希望添加的case在最前面,然后是修改或者查询,最后才是删除,以 ...
- 【BZOJ4004】【JLOI2015】装备购买
Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 < ...
- redis动态扩展内存
需求:将redis内存从1G扩展到3G,不中断服务 1.打开客户端 # redis-cli -p 6391 2.查看当前值 redis 127.0.0.1:6391> config get ma ...
- Java EE之通过表单上传文件
public class Ticket { private String customerName; private String subject; private String body; priv ...
- 解题:SDOI 2017 数字表格
题面 反演题,推式子么=.= $\prod\limits_{d=1}^{min(n,m)}\prod\limits_{i=1}^n\prod\limits_{j=1}^m[gcd(i,j)==d]fi ...
- 【DP】【CF1097D】 Makoto and a Blackboard
更好的阅读体验 Description 给定一个数 \(n\),对它进行 \(k\) 次操作,每次将当前的数改为自己的因数,包括 \(1\) 和自己.写出变成所有因数的概率是相等的.求 \(k\) 次 ...
- MySQL使用笔记(八)统计函数和分组数据记录查询
By francis_hao Dec 17,2016 统计函数数据记录查询 统计函数 统计函数 描述 count() count(*):统计表中记录条数(包括NULL值字段) count(fie ...
- python【数据类型:集合】