覆盖、重载、抽象类

1. 想要观察多态是如何运行的,我们先退回去看一般声明引用和创建对象的方法

Dog myDog=new Dog();

Dog myDog部分是先声明一个引用变量,new Dog创建对象。重点在于引用类型与对象的类型相符。

但在多态中,引用与对象可以是不同的类型。

Anlimal myDog=new Dog();

这两者类型不同。运用多态时,引用类型可以是实际对象类型的父类。

如果将程序代码编写成使用多态参数,可以在运行时传入任何的子类对象。

2.覆盖的规则

1)如果你要覆盖父类的方法时,就要遵守规则。父类方法没有参数并返回布尔值,那么你覆盖的方法就必须没有参数且返回布尔值。

2)不能降低方法的存取权限。存取权限必须相同,或者更加开放。比如,你不可以覆盖一个为public的方法并且将它标记为私有。这回让它以为在编译期通过是个公有,然后再执行期间被虚拟机阻止全区。

3.重载

重载的意义是两个方法的名称相同,但参数不同。 所以重载与多态毫无关系。

1)返回类型可以不同,但不能只改变返回类型。如果只有返回类型不同,但参数一样,这是不允许的,编译器不允许。

2)你可以任意的设定重载方法的权限。

4.抽象类

我们一定要有父类来产生继承和产生多态,但是要限制只有它的子类才能被初始化。防止类被初始化有个关键字——abstract。使类不能被被new出来,编译器知道不管在哪里,这个类不能创建任何类型的实例。

但你还是可以使用抽象类来声明为引用类型给多态使用。比如:父类  z=new 子类();

抽象类除了被继承过之外,没有任何用途,没有值,没有目的的。(可以有static的成员)

除了类之外,也可以将方法标记为abstract,抽象的类代表此类,必须要被extend过,抽象方法代表此方法一定要被覆盖。

如果你声明出一个抽象的方法,就必须将类也标记为抽象的,不能在抽象类中拥有抽象方法。即使只有一个抽象方法,类也必须声明为抽象的。

抽象的方法没有内容,只是为了标记出多态而存在。这表示在继承树结构下的第一个具体类就必须要实现出所有的抽象方法。但是你还是可以通过抽象机制将实现的负担转给下层,比如说animal与Canine都标记为abstratct,那么Canine就无需实现出animal的抽象方法。但具体的类,比如Dog就要实现Animal和Cannie的抽象方法。抽象类可以带有抽象或者非抽象方法,所以Canine也可以实现animal的抽象方法,让Dog不必实现这个部分。

“你不需要实现所有抽象的方法”时,表示你必须写出内容,以相同的方法鉴名(名称与参数)和相同的返回类型创建出非抽象的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值