继承和动态绑定

 
 class Animal
{   
	 private int weight;		
	public Animal()
		{System.out.println("Animal(): "+this);
		this.weight=20;}
	public int getWeight()
	{
		return this.weight;
	}	
	public void setWeight(int w)
	{
		this.weight=w;
	}
}
 class Dog extends Animal
{	public Dog()
    {
	System.out.println("Dog(): "+this);
	  //this.weight=20;
	}
	/**
	 
	*子类新增方法
	*/
    	public void Bark()
	{
		System.out.println("Wang~~Wang~~~");
	
	}
}


public class MyDog{private static Animal myAnimal;public static void main(String args[])

{
		myAnimal=new Dog();

运行结果:

第一条运行结果调用的是父类的构造方法,但是传递的是子类对象的哈希地址。所以创建子类对象不会创建父类对象。同理,父类是抽象类也不会创建父类对象。

在这段代码中,一加载主类,在方法区的数据区的静态数据开辟了一个变量空间,名字叫myAnimal,类型是Animal,有一个确切的值null,同时得把Animal.class文件加载到方法区。jdk执行主方法,创建子类对象,并调用了父类的构造方法,在堆里头为父类的私有属性weight开辟空间,接着子类对象开辟空间,没有属性,为新增的方法开辟空间。调用父类的构造方法,传递子类对象的地址,而这个方法是和父类动态绑定的。其实是先在子类对象找有没有weight属性,没有找到通过在父类构造方法里找与父类绑定并且和当前对象关联的weight属性,找到以后往里赋值。

继承是由已经有的类创建新类,java中只支持单继承,不支持多重继承,如果想实现多继承可以通过接口的方式实现。语法是:子类extends父类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值