继承的基本概念
继承是面向对象的三大特性之一。继承可以解决编程中代码余的问题,是实现代码重要的手段之一。继承是软件可以重用行的一种表现,新类可以在不添加i神代码的情况下,通过先有的类中继承其属性和方法,来充实自身内容。这种现象或行为称为继承。此时新类称为子类。现有的类称为父类,继承最基本的作用就是使得代码可以重用,增加软件的可扩展性。
java中只支持单继承,即每个类中只能由一个直接父类。
继承表的是"xxis axx"的关系,或者说是一种特殊和一般的关系,如dog is a pet。同样可以让"学生"继承"人",让"苹果"继承"水果",让"三角形"继承"几何图形"。
继承的语法格式如下:
[访问修饰符]class <SubClass>extends<SuperClass>{
}
在Java中,继承通过extends关键字实现,其中SubClass称为子类,SuperClass称为父类或基类。
访问修饰符如果是public,那么该类在整个项目中可见。
若不写访问修饰符,则该类只在当前包中可见。
在Java中,子类可以从父类中继承内容。
继承的应用
若使用面向对象编写部门类,目前共有8个部门,需要定义8个类,各个部门有很多共同属性。导致很多代码都是一样的,只有很少一部分不一样,如果使用继承,就可以对相同的代码实现重用,提高工作效率
使用super关键字调用父类成员
当需要在子类中调用父类的构造方法时,可以使用super关键字调用。
当函数参数或函数中局部变量和成员变量同名时,super关键字和this关键字的作用类似,都是将被屏蔽了的成员变量,成员方法变得可见可用,也就是说,用来引用被
屏蔽的成员变量或方法。不过super是在子类中,目的只有一个,
就是访问直接父类中被屏蔽的内容,进一步提高代码的重用性和灵活性。super关键字不仅可以访问父类的构造方法。还可以访问父类的成员,包括父类的属性,一般方法等。
实例化子类对象
在Java中,一个类的构造方法在如下两种情况下总是会被执行
创建该类的对象(实例化)
创建该类的子类对象(该类的实例化)
因此。子类在实例化时,会首先执行其父类的构造方法,然后再执行子类的构造方法。换言之,当在java语言中创建一个对象时,Java虚拟机会按照父类一一子类的顺序执行一系列构造方法。
方法重写
如果从父类继承的方法不能满足子类的需求,可以再子类中对父类的同名方法进行重写(颠覆),以符合需求。
在子类中可以根据需求对父类继承的方法进行重新编写,这称为方法重写或方法的覆盖
方法重写必须满足如下要求
重写方法和被重写方法必须具有相同的方法名
重写方法和被重写方法必须具有相同的参数列表,
重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类型,
重写方法不能缩小被重写方法的访问权限
重载涉及同一个类中的同名方法,要去方法名相同,参数列表不同,与返回值类型无关。
重写设计的是子类和父类之间的同名方法,要去方法名相同,参数列表相同,返回值类型相同。
实现多态
1认识多态
多态一词的通常含义是指能够呈现出多种不同的形式或形态。而在程序设计的语数中,他以为着一个
特定类型的变量可以引用不同类型的对象,并且能自动的调用引用的对象方法,也就是根据作用到不同的对象类型,相应不同的操作,方法重写是实时多态的基础
2向上转型
子类向父类转型称为向上转型
向上转型的语法如下
<父类形><引用变量名>=new <子类型>();
把nt型通常或者变量的值赋给double形变量,可以自动进行类型转换。
int i=5;
double d1=5;
把doble型 通常或者变量的值赋给int型变量,必须进行强制类型转换。
double d2=3.14;
int a=(int)d2
//Pet为抽象父类,Dog为子类,Pet中包含抽象方法toHospital()Pet pet=new Dog();
//子类到父类的转换
//会调用dog类的toHospital()方法,而不是Pet类的toHospital()方法,体现了多态Pet。toHospital
就一个父类的引用指向一个子类对象称为向上转型,系统会自动进行类型转换,
此时通过父类引用变量体调用的方法是子类颠覆或者继承了父类的方法,不是父类的方法,
此时通过父类引用变量无法调用子类特有的方法,
4instanceof运算符
如果不是转换为真是子类类型,会出现类型转换异常。
2多态的应用
多态的又是非常突出
1可扩充性:多态对代码具有可扩展性。增加新的子类不影响已存
类的多态性,继承性,预计其他特性的运行和操作,实际上新加
子类更容易获得多态功能。
2可替换性:多态对已存在的代码具有可替换性。
3接口性:多态在应用中体现了灵魂性多样的操作。提高了使用效率。
4灵活性,多态是父类想子类提供了一个共同接口,由子类实现具体。
5简约型:多态简化了应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点有位突出和重要
使用父类作为方法的参数
使用父类作为方法的形参,是Java中实现和使用多态的主要方法。
2使用父类作为方法返回值
使用父类作为方法的返回值,也是Java中实现和使用多态的主要方法,