Java继承与方法覆盖

1.继承

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的所有数据属性(成员变量)和行为(成员方法),并能扩展新的能力。

PS:即使是private属性的成员变量和成员方法也都被继承。

被继承的类叫父类,继承的类叫子类。

父类又叫超类或基类,子类又叫派生类。

Java中一个子类只能继承一个父类,但可以实现多个接口。

可以创建指向子类对象的父类引用,但不可以创建指向父类对象的子类引用。

2.方法覆盖

由于继承,会产生子类覆盖(重写)父类方法的现象。

什么是方法覆盖?

子类中重写父类中已有的方法,即子类重写的方法与父类的方法同名且签名也相同。

声明为final的方法,不允许被子类重写。

子类重写父类方法时,不允许改变返回值的类型,但有一种情况列外"协变返回(covariant return)",仅在子类方法的返回类型继承于父类方法返回类型的时才被容许。

子类重写父类方法时,访问权限不可以降级。

访问权限从高级向低级排列:public > protected > 默认(friendly) > private 。

错误重写方法举例:

①改变了返回值类型

public class OverTest extends Test{
	public int play() {	
		return 0;
	}
}
class Test{
	public void play(){	
	}
}

②访问权限降级了,父类中方法是public权限,到子类中方法变成了protected权限。

public class OverTest extends Test{
	protected void play() {	
	}
}
class Test{
	public void play(){	
	}
}

3.浅谈多继承

Java类继承一个类和实现若干个接口时,或实现多个接口时。如果被继承的类或被实现的接口中,有相同的方法名称和签名,那么它们的返回类型必须相同(或者该Java类重写的方法的它们返回类的继承类),否则该类不能同时继承它们,这个重写的方法同时对它们都有效。(很多同学在此纠结,就是因为不知道重写的方法是对多个继承对象同时有效的)。Java接口也可以继承多个接口。

/*
正确的使用多继承的方法
*/
class Animal{
	int play(){
		return 0;	
	}
}
interface Animalref  {
	int play();
}
class Bird extends Animal implements Animalref{
	public int play(){	
		return 0;
	}
}

PS:有一位朋友在评论中提到类应该是继承接口而不是实现接口。

我在这里说一下,类继承类的时候用的是extends关键字,实现接口的时候用的是extends关键字,接口继承接口的时候用的是extends关键字。

我们可以从关键字中明确的看到,类确实是实现接口。

但广义上可以说类继承接口。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值