《继承与多态》课件.ppt
继承与多态:面向对象程序设计的核心概念
本节课学习目标理解继承的概念了解继承的基本概念、语法和使用场景。掌握多态的实现学习多态的定义、必要条件和实现方式,并理解其优势。
什么是继承?继承是面向对象编程中最重要的概念之一,它允许创建一个新的类(子类),继承另一个类的属性和方法(父类)。子类可以扩展或修改父类的功能,并拥有父类的所有非私有成员。
继承的基本概念继承是一种“is-a”关系,表示子类是父类的一种特殊类型。例如,猫是动物的一种,狗也是动物的一种,它们都继承了动物类的属性和方法,并拥有各自的特性。
为什么需要继承?1代码重用:继承允许子类复用父类的代码,减少代码冗余,提高开发效率。2代码扩展:继承可以扩展父类的功能,添加新的属性和方法,满足更复杂的需求。3代码维护:继承方便代码的修改和维护,因为对父类的修改会自动反映到子类中。
继承的优点提高代码的可维护性修改父类代码,子类自动更新,减少修改范围。增强代码的可扩展性可以轻松添加新的子类,扩展系统的功能。提升代码的复用性减少重复代码,提高开发效率。
继承的语法class子类extends父类{//子类自己的成员}使用extends关键字来声明继承关系,子类继承父类的所有非私有成员。
单继承示例:动物类Animal类classAnimal{Stringname;voideat(){System.out.println(动物在吃东西);}}Dog类classDogextendsAnimal{voidbark(){System.out.println(汪汪汪);}}
继承中的访问控制继承关系中,子类对父类成员的访问权限受到访问控制修饰符的限制。
public、protected和private访问修饰符修饰符类内包内子类其他public√√√√protected√√√×private√×××
继承中的构造函数子类必须调用父类的构造函数来初始化父类的成员变量。子类构造函数的第一行隐式调用父类无参构造函数。如果父类没有无参构造函数,子类必须显式调用父类带参构造函数。
构造函数执行顺序子类对象的创建过程中,构造函数的执行顺序为:父类构造函数-子类构造函数。
代码示例:构造函数调用父类classParent{Parent(Stringname){System.out.println(父类构造函数:+name);}}子类classChildextendsParent{Child(Stringname){super(name);System.out.println(子类构造函数:+name);}}
super关键字的使用super关键字用于访问父类成员,包括父类构造函数、父类方法和父类成员变量。
调用父类构造函数在子类构造函数中,使用super(参数)显式调用父类的构造函数。
调用父类方法在子类方法中,使用super.方法名(参数)调用父类的方法。
方法重写的概念方法重写是指子类重新定义父类的方法,方法名和参数列表必须相同,返回值类型必须相同或为父类返回值类型的子类型。方法重写允许子类根据自身需求修改父类的方法行为。
方法重写vs方法重载方法重写发生在继承关系中,子类重写父类的方法;方法重载发生在同一个类中,多个方法具有相同的方法名,但参数列表不同。
方法重写的规则1方法名和参数列表必须相同。2返回值类型必须相同或为父类返回值类型的子类型。3访问权限不能比父类方法更低。4父类方法不能是私有的。
@Override注解的作用@Override注解用于标识子类方法是重写父类方法,可以提高代码的可读性和可维护性,同时也可以帮助编译器检测代码错误。
代码示例:方法重写父类classAnimal{voideat(){System.out.println(动物在吃东西);}}子类classDogextendsAnimal{@Overridevoideat(){System.out.println(狗在吃骨头);}}
继承中的成员变量子类可以访问父类的成员变量,但如果子类定义了与父类同名的成员变量,则会发生隐藏现象。
隐藏vs重写隐藏是指子类成员变量隐藏父类成员变量,访问子类成员变量需要使用this关键字;重写是指子类方法重写父类方法,访问父类方法需要使用super关键字。
this和super的区别this关键字指向当前对象,super关键字指向父类对象。this