人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便于保存一份美好的回忆。相信许多人会觉得范文很难写?下面我给大家整理了一些优秀范文,希望能够帮助到大家,我们一起来看一看吧。
java虚方法调用 java虚方法的作用篇一
我们已经讨论了方法的重载,也就是子类能够重载父类的方法。以下是小编为大家搜索整理的java虚方法,欢迎大家阅读!更多精彩内容请及时关注我们应届毕业生考试网!
当子类对象调用重载的方法时,调用的是子类的方法,而不是父类中被重载的方法。
要想调用父类中被重载的方法,则必须使用关键字super。
/* 文件名 : */
public class employee
{
private string name;
private string address;
private int number;
public employee(string name, string address, int number)
{
n("constructing an employee");
= name;
s = address;
= number;
}
public void mailcheck()
{
n("mailing a check to " +
+ " " + s);
}
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类:
/* 文件名 : */
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()
{
n("within mailcheck of salary class ");
n("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()
{
n("computing salary pay for " + getname());
return salary/52;
}
}
现在我们仔细阅读下面的代码,尝试给出它的输出结果:
/* 文件名 : */
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);
n("call mailcheck using salary reference --");
eck();
n("\n call mailcheck using employee reference--");
eck();
}
}
以上实例编译运行结果如下:
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类中的声明。
在调用eck()时,java虚拟机(jvm)调用salary类的mailcheck()方法。
因为e是employee的引用,所以调用e的mailcheck()方法则有完全不同的结果。
当编译器检查eck()方法时,编译器检查到employee类中的mailcheck()方法。
在编译的时候,编译器使用employee类中的mailcheck()方法验证该语句, 但是在运行的时候,java虚拟机(jvm)调用的是salary类中的mailcheck()方法。
该行为被称为虚拟方法调用,该方法被称为虚拟方法。
java中所有的方法都能以这种方式表现,借此,重写的方法能在运行时调用,不管编译的时候源代码中引用变量是什么数据类型。
s("content_relate");【java虚方法】相关文章:
1.java程序运行方法
2.java方法重写的方法分析
3.用java重载的方法
4.java调用的几个方法
5.java泛型方法推荐
6.java动态方法调度实例
7.java使用方法集锦
8.java的常见排序方法
9.java parseint解释加方法
【本文地址:http://www.xuefen.com.cn/zuowen/2653969.html】