关于继承之间的关系

LZ最近在看一些面试的书,发现关于继承和引用这一块之前的知识有点出入,首先是在继承这里,关于调用具体的方法,因为得看具体的代码,比如下面这个代码:

class classA
{
    public void printValue()
    {
        System.out.println("classA");
    }
}

class classB extends classA
{
    public void printvalue()
    {
        System.out.println("classB");
    }
}

public class Test
{
    public static void main(String args[])
    {
        classB objectB = new classB();
        objectB.printvalue();
        classA as = (classA)objectB;
        as.printValue();
        as = new classA();
        as.printValue();
    }
}

这里输出的classB classB classA,虽然这里被强制转化了,但是仍然执行子类的方法,那么在调用as的方法时候,就会自动调用这个classA的方法。

另外还有一个很容易错的地方:

public class Test5
{
	public static void main(String args[])
	{
		Father father = new Father();
		Father child = new Child();
		System.out.println(father.getName());
		System.out.println(child.getName());
	}
}

class Father
{
	public static String getName()
	{
		return "Father";
	}
}

class Child extends Father
{
	public static String getName()
	{
		return "Child";
	}
}

这个返回的结果是Father和Father。其中这是因为这里的getName方法是static的,也就是静态方法,它们在内存中的地址空间是固定的,而且不存在冲突的问题,也就是说它们占用的是不同的内存地址空间。也就是说静态方法是不能被覆盖的。所以还是都是输出的是Father。如果要能被覆盖,那么得这么改

public class Test5
{
	public static void main(String args[])
	{
		Father father = new Father();
		Father child = new Child();
		System.out.println(father.getName());
		System.out.println(child.getName());
	}
}

class Father
{
	public String getName()
	{
		return "Father";
	}
}

class Child extends Father
{
	public String getName()
	{
		return "Child";
	}
}

将这个静态去掉,这样就可以覆盖方法了,那么我们就可以实现我们想要的结果:Father Child。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值