第七章继承,多态,抽象类与接口

类的继承

继承在面向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性。在程序中复用一些已经定义完善的类,不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。本节将详细讲解类的继承。

 Object类

是比较特殊的类,它是所有的父类,是Java类层中最高层类。在Object类中,主要包括clone()、finalize()、equals()、toString()方法等。

返回参数相同,,方法名相同,传入参数相同,方法体不同。

(1)etClass()方法:是Object类定义的方法,它会返回对象执行的class实例,然后使用此实例调用getName()方法取得类的名称;getClass().getname();。

(2)toString()方法:是将一个对象返回为字符串形式,它会返回一个String实例。重写toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串与字符串连接时,将自动调用重写的toString()方法。

 equals()方法:在Java语言中,有两种比较对象的方式,分别”==“运算符和equals()方法。两者的区别在于:"=="比较的是两个对象引用内存地址是否相等,而equals()方法比较的是两个对象的实例内容。

 对象类型的转换:对象类型的转换在Java编程中经常遇到,主要包括向上转型和向下转型操作

向下转型:将父类对象赋值给子类引用,需要强制类型转换,Dog a=(Dog)new Animal();

 .final方法:将方法定义为final类型,可以防止子类修改父类的定义与实现方式,同时定义为final的方法的执行效率要高于非final方法,在修饰权限中曾经提到过private修饰符,如果一个父类的某个方法被设置为private,子类将无法访问该方法,自然无法覆盖该方法。也就是说,一个定义为private的方法隐式被指定为final类型,因此无需将一个定义为private的方法在定义为final类型。例如:private final void test(){
.final类:定义为final的类不能被继承。如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为final类

使用instanceof关键字判断对象类型

instanceof关键字:在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生classcastexception异常,所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个通常使用instanceof关键字来完成。可以使用instanceof关键字判断是否一个类实现了某个接口,也可以使用他来判断一个实例对象是否属于一个类


多态:利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。子类对象可以作为父类对象实例使用,这种将子类对象视为父类对象的做法称为“向上转型”。假如现在要编写一个绘制图形的方法draw(),如果传入正方形对象就会绘制正方形,如果传入圆形对象就会绘制圆形,这种场景可以使用重载来实现
抽象类与接口

通常可以说四边形具有4条边,或者更具体一点,平行四边形是具有对边平行且相等特性的特质四边形,等腰三角形是其中两条边相等的三角形,这些描述都是合乎情理的

反过来讲,如果声明一个抽象方法,就必须将承载这个抽象方法的类定义为抽象类,不能在非准象类中获取抽象方法。换句话说,只要类中有一个抽象方法,此类就被标记为抽象类。

接口

接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。对于7.8.1节中遗留的问题,可以将drawO方法封装到一个接口中,使需要 drawO方法的类实现这个接口,同时也继承图形类,这就是接口存在的必要性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值