java多态的理解

示例代码:


package org.zeng.duotai;

public class Test {
	
	public static void main(String args[]) {
		Animal animal = new Animal();
		Dog dog = new Dog();
		
		animal.getName();
		Animal.getWeight();
		System.out.println("---------------------------------------------");
		dog.getName();
		Dog.getWeight();
		System.out.println("------------下面是多态的现象------------------------");
		Animal a = new Dog();  // 父类引用指向子类对象
		a.getName();
		a.getWeight();	
		System.out.println("============下面是对态的应用=====================");
		test(a);
	}
	
	public static void test(Animal a) {
		a.getName();
	}
}

class Dog extends Animal {
	public static void getWeight() { // 重写父类方法,静态方法  
		System.out.println("The Class is Dog! and method is static");
	}
	public void getName() { // 重写父类方法,成员方法
		System.out.println("The Class is Dog! and method is dynamic");
	}	
}

class Animal {
	public static int weight = 100; // 静态属性
	public String name = "animal";  // 成员属性
	
	public static void getWeight() { // 静态方法
		System.out.println("The Class is Animal! and method is static");
	}
	public void getName() { // 成员方法
		System.out.println("The Class is Animal! and method is dynamic");
	}	
}
运行结果为:

The Class is Animal! and method is dynamic
The Class is Animal! and method is static
---------------------------------------------
The Class is Dog! and method is dynamic
The Class is Dog! and method is static
------------下面是多态的现象------------------------
The Class is Dog! and method is dynamic
The Class is Animal! and method is static
============下面是对态的应用=====================
The Class is Dog! and method is dynamic

总结:产生多态的三个条件:继承、重写、父类引用指向子类对象

1.成员变量:编译看左边(父类,一定要有),运行时(调用时)看左边(父类,子类覆盖了父类的成员变量时,打印出的就是父类的变量值) 
2.成员方法:编译看左边(父类,一定要有),运行时(调用时)看右边(子类,子类覆盖了父类的成员方法时,调用的是子类的方法); 
3.静态方法:编译看左边(父类,一定要有)(重写), 运行时(调用时)看左边(父类的)

也就是说,类的属性是没有多态性的(可以自己测试),静态的方法也是没有多态性的,都没有动态绑定,只有成员方法才会有动态绑定,才会产生多台现象(事实上多态性产生的条件之一,重写,就限制了属性不能产生多态)

具体深层次的原因可以从内存分配和java动态绑定机制这2方面入手深究。以后空闲时,再做深究。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值