一、继承
1、继承的基本概念
继承是面向对象的三大特征之一,继承可以解决编码中代码冗余的问题,是实现代码重用的重要手段之一。继承是软件可重用性的一种表现,
新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种现象或行为就称为继承。此时新类称为
子类,现有的类称为父类。继承最基本的作用就是使得代码可以重用,增加软甲的可扩充性。java中只支持单继承,即每个类只能有一个直
接父类。
继承的语法格式:[访问修饰符] class<SubClass<extends<SuperClass
<<<<在java中,继承通过extends关键字实现,其中SubClass称为子类,SuperClass称为父类
<<<<访问修饰符如果是public,那么该类在整个项目中可见
<<<<若不写访问修饰符,则该类只在当前包中可见
<<<<在java中,子类可以从父类中继承public和protected修饰的属性和方法,不论是否在一个包里,也可以继承默认访问修饰符修饰的属性和方
法,但是子类和父类必须在一个包里,子类无法继承父类的构造方法
2、使用继承和重写实现部门类及子类
关键步骤:
>>使用extends关键字建议继承关系
>>使用super关键字调用父类成员
>>使用方法重写,重写父类中的方法,输出子类自身的信息
1、使用super关键字调用父类成员
语法格式:访问父类构造方法:super(参数)
访问父类属性/方法:super.<父类属性/方法>
>>super只能出现在子类(子类的方法和构造方法)中,而不是其他位置
>>super用于访问父类的成员,如父类的属性、方法、构造方法
>>具有访问权限的限制,如无法通过super访问父类的private成员
2、实例化子类对象
在java中,一个类的构造方法在如下两种情况下总是会被执行:
>>创建该类的对象(实例化)
>>创建该类的子类的对象(子类的实例化)
子类在实例化时,会首先执行其父类的构造方法,然后才执行子类的构造方法。
子类继承父类时构造方法的调用规则如下:
(1)如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,
则系统会默认先调用父类的无参构造方法。这种情况下,是否写“super();”语句,效果是一样的。
(2)如果子类的构造方法中通过super显式调用了父类的有参构造方法,那么将执行父类相应的构造方法,而不是执行
父类无参构造方法
(3)如果子类的构造方法中通过this显式调用了自身的其他构造方法,在相应构造方法中遵循以上两条规则
3、Object类
Object是所有类的父亲,在java中,所有的java类都直接或间接地继承了java.lang.Object类。Object类是所有java类的祖先,
在定义一个类时,没有使用extends关键字,也就是没有显式地继承某个类,那么这个类直接继承Object类,所有对象都继
承这个类的方法。
3、方法重写
方法重写需要满足的要求:
>>>>重写方法和被重写方法必须具有相同的方法名
>>>>重写方法和被重写方法必须具有相同的参数列表
>>>>重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类
>>>>重写方法不能缩小被重写方法的访问权限
>>>>重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关
>>>>重写涉及的是子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同
二、多态
1、认识多态
(1)多态是指能够呈现出多种不同的形式或形态,在程序设计的术语中,它意味着一个特定类型的变量可以引用不同类型的对象,
并且能够自动的调用引用对象的方法,也就是根据作用到不同对象类型,响应不同的操作,方法重写是实现多态的基础。
多态意味着在一次方法调用中根据包含的对象的实际类型(即实际的子类对象)来决定应该调用哪个方法,而不是由用来存
储对象引用的变量的类型决定的,当调用一个方法时,为了实现多态的操作,这个方法既是父类中声明过的,也必须是在子
类中重写过的方法。
(2)向上转型
子类向父类转换称为向上转型,语法格式:
<父类型> <引用变量名> =new <子类型> ()
子类转换成父类的规则:
>>> 将一个父类的引用指向一个子类对象称为向上转型,系统会自动进行类型转换
>>> 此时通过父类引用变量调用的方法是子类覆盖或继承了父类的方法,不是父类的方法
>>> 此时通过父类引用变量无法调用子类特有的方法
(3)向下转型
将一个指向子类对象的父类引用赋给一个子类的引用,即将父类类型转换为子类类型,称为向下转型,此时必须进行强制类型转换
向下转型的语法:
<子类型><引用变量名> = (<子类型>) <父类型的引用变量>
(4)instanceof 运算符
instanceof运算符用来判断在转型过程中出现的类型转换异常
使用instanceof是,对象的类型必须和instanceof后面的参数所指定的类有继承关系,否则会出现编译错误
2、多态的应用
多态的优势:
>>> 可替换性:多态对已存在的代码具有可替换性
>>>可扩充性:多态对代码具有扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特征的运行和操作,实际上
新加子类更容易获得多态功能
>>>接口性:多态是父类向子类提供了一个共同接口,由子类来具体实现
>>>灵活性:多态在应用中提现了灵活多样的操作,提高了使用效率
>>>简化性:多态简化了应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要
多态的两种主要应用形式:
(1)使用父类作为方法的形参
(2)使用父类作为方法的返回值