java 虚类_java虚方法

java虚方法

我们已经讨论了方法的重载,也就是子类能够重载父类的方法。以下是小编为大家搜索整理的java虚方法,欢迎大家阅读!更多精彩内容请及时关注我们应届毕业生考试网!

当子类对象调用重载的方法时,调用的是子类的方法,而不是父类中被重载的.方法。

要想调用父类中被重载的方法,则必须使用关键字super。

/* 文件名 : Employee.java */

public class Employee

{

private String name;

private String address;

private int number;

public Employee(String name, String address, int number)

{

System.out.println("Constructing an Employee");

this.name = name;

this.address = address;

this.number = number;

}

public void mailCheck()

{

System.out.println("Mailing a check to " + this.name

+ " " + this.address);

}

public String toString()

{

return name + " " + address + " " + number;

}

public String getName()

{

return name;

}

public String getAddress()

{

return address;

}

public void setAddress(String newAddress)

{

address = newAddress;

}

public int getNumber()

{

return number;

}

}

假设下面的类继承Employee类:

/* 文件名 : Salary.java */

public class Salary extends Employee

{

private double salary; //Annual salary

public Salary(String name, String address, int number, double

salary)

{

super(name, address, number);

setSalary(salary);

}

public void mailCheck()

{

System.out.println("Within mailCheck of Salary class ");

System.out.println("Mailing check to " + getName()

+ " with salary " + salary);

}

public double getSalary()

{

return salary;

}

public void setSalary(double newSalary)

{

if(newSalary >= 0.0)

{

salary = newSalary;

}

}

public double computePay()

{

System.out.println("Computing salary pay for " + getName());

return salary/52;

}

}

现在我们仔细阅读下面的代码,尝试给出它的输出结果:

/* 文件名 : VirtualDemo.java */

public class VirtualDemo

{

public static void main(String [] args)

{

Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);

Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

System.out.println("Call mailCheck using Salary reference --");

s.mailCheck();

System.out.println("\n Call mailCheck using Employee reference--");

e.mailCheck();

}

}

以上实例编译运行结果如下:

Constructing an Employee

Constructing an Employee

Call mailCheck using Salary reference --

Within mailCheck of Salary class

Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--

Within mailCheck of Salary class

Mailing check to John Adams with salary 2400.0

例子中,我们实例化了两个Salary对象。一个使用Salary引用s,另一个使用Employee引用。

编译时,编译器检查到mailCheck()方法在Salary类中的声明。

在调用s.mailCheck()时,Java虚拟机(JVM)调用Salary类的mailCheck()方法。

因为e是Employee的引用,所以调用e的mailCheck()方法则有完全不同的结果。

当编译器检查e.mailCheck()方法时,编译器检查到Employee类中的mailCheck()方法。

在编译的时候,编译器使用Employee类中的mailCheck()方法验证该语句, 但是在运行的时候,Java虚拟机(JVM)调用的是Salary类中的mailCheck()方法。

该行为被称为虚拟方法调用,该方法被称为虚拟方法。

Java中所有的方法都能以这种方式表现,借此,重写的方法能在运行时调用,不管编译的时候源代码中引用变量是什么数据类型。

【java虚方法】相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下快速启动或关闭系统服务方法

在windows下有些后台服务会开机自动启动。 用命令行方式启动关闭应用服务 使用sc.exe命令功能列表 修改服务启动类型的命令行格式为(特别注意start后面有一个空格)    sc config 服务名称 start demand(设置服务为手动启动)     sc config 服务名…

我为什么fuck GFW同时FUCK 开心网

我很生气,后果很严重,你要问我为什么,那是因为GFW 屏蔽了一个对我有用的站点[url]www.github.com[/url], 什么玩意(省略1亿遍fuck 他们的话)。 开心网删除我的日记, 并没用通知过我&#xff0c…

java 变量存放在哪_Java全局变量存放在哪里?

我们说 常量,静态变量存放在方法区中,方法中的临时变量,存放到Java 虚拟栈中。有人问,那全局变量*(对象)存放在哪里. 其实全局变量 就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区 与堆一样,是被线程共享的区域。在方法区中,存储了每…

中国网瘾群落调查

到底有多少青少年患上网瘾?答案是惊人的400万。在此前举行的全国人大常委会的会议上,全国人大常委会副委员长、秘书长李建国称,目前我国约4000万未成年网民中“网瘾少年”占10%左右,主要原因是迷恋网络游戏。华中师范大学教授、著…

从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...

这一章节我们来讨论一下如何通过属性注入Bean?这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入还有一个对象的引用。1.如何通过属性向对象注入值?(1)domainpackage c…

chrome java虚拟机_JATT:谷歌的Java虚拟机自动调整工具

JATT是google的Java虚拟机自动调整工具,它是一个开源软件工具,用于优化Java虚拟机(JVM)。JATT是基于OpenTuner开发的,OpenTuner是另一个开源软件框架,用于构建域特定的自动微调器。 JATT专门用于调整HotSpot JVM,这是最…

初识北京

话说话说就来了北京,长期在南方生活惯了,来这里还真有点不习惯。。。 1.、北京不算整洁的城市,作为一个有历史的城市,电线乱牵,路面邋遢,当然,对于一贯低要求的中国人来说问题也不是很严重&…

jsb调用java_在JS代码中使用反射调用java代码注意事项(附webview使用方法)(转)...

本文是推荐使用过jsb.reflection的开发者进行阅读。关于jsb.reflection的说明请参照:我们在代码编写过程中,通常会需要在js脚本中调用到java代码或者Objective-C的代码。例如:接入sdk,显示webview,使用原生代码&#x…

Excel表格内容导出到页面

引入org.apache.poi.ss.usermodelpublic void addExcelBooks() throws Exception { HttpServletRequest request ServletActionContext.getRequest(); String filepath request.getParameter("filepath"); String fileType filepath.substring(filepath.lastIndex…

综述ASP.NET下的AJAX模式

本文内容: 一、导言 二、XMLHttpWebForm模式 三、XMLHttpHttpHandler模式 四、ASP.NET 2.0/3.5回调模式 五、AJAX框架模式 -------------------------------------------------------------------------------------------------- 一、导言 在这篇文章中,将介绍…

java 获取类加载器_java-如何从类加载器获取类路径?

更新:我下面的原始答案很不充分,因为我花了三年的时间开发FastClasspathScanner,并提交了大量关于某些类路径环境无法使用该库的错误报告。 FastClasspathScanner现在可以处理许多复杂的类路径规范机制。 在一般情况下(即使扫描它)&#xff0…

JIRA-6.3.6安装与破解

首先下载JIRA-6.3.6的安装包: wget http://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-6.3.6.tar.gz 在这里笔者新建JIRA用户来专门运行JIRA useradd jira passwd jira 把包解压到jira的宿主目录(/home/jira)下: tar -zxvf atla…

网店健康成长之路

对网店管理新规,前天中国社科院信息化研究中心举办中国网络零售产业环境学术研讨会,各界专家共同建议:国家尽快出台“电子商务促进法”,以规范各地政府、不同部门的监管行为。何时管:监管时机未到“网络零售产业规模占…

[development][profile][dpdk] KK程序性能调优

KK程序: 1. 两个线程,第一个从DPDK收包,通过一个ring数据传递给第二个线程。第二个线程将数据写入共享内存。 2. 第二个内存在发现共享内存已满时,会直接丢弃数据。 3. 线程二有个选项debug,用于每一次ring_dequeue之后…

求二进制数中1的个数

要求:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。 大多数的读者都会有这样的反应:这个题目也太简单了吧,解法似乎也相当地单一,不会有太…