上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
来宾网站建设_企业网站制作公司_高端网站设计开发-来宾上往

super(name, address, number); setSalary(salary); }
public void mailCheck() {
System.out.println("Salary 类的 mailCheck 方法 "); System.out.println("邮寄支票给:" + getName()
+ " ,工资为:" + salary); }
public double getSalary() {
return salary; }
public void setSalary(double newSalary) {
if(newSalary >= 0.0) {
salary = newSalary; }
}
public double computePay() {
System.out.println("计算工资,付给:" + getName()); return salary/52; }}
现在我们仔细阅读下面的代码,尝试给出它的输出结果:
VirtualDemo.java 文件代码:
public class VirtualDemo {
public static void main(String [] args) {
Salary s = new Salary("员工 A", "北京", 3, 3600.00); Employee e = new Salary("员工 B", "上海", 2, 2400.00); System.out.println("使用 Salary 的引用调用 mailCheck -- "); s.mailCheck(); System.out.println("
使用 Employee 的引用调用 mailCheck--"); e.mailCheck(); }}
以上实例编译运行结果如下:
Employee 构造函数Employee 构造函数使用 Salary 的引用调用 mailCheck -- Salary 类的 mailCheck 方法 邮寄支票给:员工 A ,工资为:3600.0使用 Employee 的引用调用 mailCheck--Salary 类的 mailCheck 方法 邮寄支票给:员工 B ,工资为:2400.0
例子解析
实例中,实例化了两个 Salary 对象:一个使用 Salary 引用 s,另一个使用 Employee 引用 e。
当调用 s.mailCheck() 时,编译器在编译时会在 Salary 类中找到 mailCheck(),执行过程 JVM 就调用 Salary 类的 mailCheck()。
e 是 Employee 的引用,但引用 e 最终运行的是 Salary 类的 mailCheck() 方法。
在编译的时候,编译器使用 Employee 类中的 mailCheck() 方法验证该语句, 但是在运行的时候,Java虚拟机(JVM)调用的是 Salary 类中的 mailCheck() 方法。
以上整个过程被称为虚拟方法调用,该方法被称为虚拟方法。
Java中所有的方法都能以这种方式表现,因此,重写的方法能在运行时调用,不管编译的时候源代码中引用变量是什么数据类型。
多态的实现方式
方式一:重写:
这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)。
方式二:接口
方式三:抽象类和抽象方法
详情请看 Java抽象类 章节。
Java 重写(Override)与重载(Overload)
对于多态,可以总结以下几点:
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用);
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
小丫小石头
小丫小石头
116***1009@qq.com
参考地址
5年前 (2017-03-29)
九刃
528***187@qq.com
40
类的属性变量是能重写(覆盖)
class Animal{
public int age;
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public double age;
public void move(){
age = 10.00;
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
class Cat extends Animal{
public void move(){
super.age = 3;
System.out.println("猫可以跳");
}
}
public class TestOverride{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
Dog c = new Dog();
Cat d = new Cat();
a.move();// 执行 Animal 类的方法
b.move();//执行 Dog 类的方法
c.move();//执行 Dog 类的方法
d.move();//执行 Cat 类的方法
Object aValue = a.age;
Object bValue = b.age;
Object cValue = c.age;
System.out.println("The type of "+a.age+" is "+(aValue instanceof Double ? "double" : (aValue instanceof Integer ? "int" : "")));
System.out.println("The type of "+b.age+" is "+(bValue instanceof Double ? "double" : (bValue instanceof Integer ? "int" : "")));
System.out.println("The type of "+c.age+" is "+(cValue instanceof Double ? "double" : (cValue instanceof Integer ? "int" : "")));// 覆盖age属性
System.out.println("The age of cat is "+d.age);
}
}
编译值:
动物可以移动
狗可以跑和走
狗可以跑和走
猫可以跳
The type of 0 is int
The type of 0 is int
The type of 10.0 is double
The age of cat is 3
九刃
九刃
528***187@qq.com
5年前 (2017-06-27)
xiaohau7988
107***2774@qq.com
9
多态引用时,构造子类对象时的构造方法的调用顺序
1,先调用超类的构造方法,多重超类首先调用最远超类的方法;
2,然后再执行当前子类的构造方法;
调用时需要谨慎处理调用方法
xiaohau7988
xiaohau7988
107***2774@qq.com
5年前 (2017-10-15)
matthew
656***122@qq.com
参考地址
29
多态的分类
多态一般分为两种:重写式多态和重载式多态。
重载式多态,也叫编译时多态。也就是说这种多态再编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。
来宾网站建设_企业网站制作公司_高端网站设计开发-来宾上往
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)