继承和多态

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值