5、继承
- 格式:doc
- 大小:61.00 KB
- 文档页数:5
5、继承
5.1 继承的基本概念
继承:就是扩展已有类的功能,在继承中分为子类和父类,父类有时候又称为超类(super class)、子类有时候也称为派生类。
语法:class 子类extends 父类{}
5.2 继承的限制
在使用继承的时候虽然可以扩充类的功能,但是其本身也是存在以下限制的:
1、在java中不允许多重继承:一个子类只能继承一个父类,不能继承多个父类。
2、在java中允许多层继承。
3、在继承中子类不能访问父类的私有操作,而只能继承全部的公共操作。
5.3 子类的实例化过和
会先执行父类中的无参构造方法(如果没有定义,则编译时也会出现错误),之后才调用了子类自己的构造方法,那么为什么这么做。
1、构造方法的主要目的:是为类中的属性初始化
2、在实例化子类对象的时候肯定要首先实例化父类中的内容,为父类初始化。
父类在程序中又称为super class 实际上此语句就是表示调用父类中的无参构造方法。
5.4 方法的覆写
方法的覆写是发生在继承的关系之中,子类覆写了父类中的相关方法.
子类定义了与父类同名的方法,称为方法的覆写,在方法覆写的时候一定要注意访问权限问题,被覆写的方法不能拥有比子类更严格的访问权限。
访问权限:public、protected、private、default,权限由小到大的划分:private<default,protected<public
在使用子类实例化对象调用类中被覆写过的方法时,调用的永远是被覆写的操作。
如果希望调用父类中被子类覆写过的方法,则只能通过super方法()的形式调用。
5.5 属性的覆盖(了解)
子类中声明了父类中同名的方法,称为覆盖。
但是,从实际开发来看,属性基本上都属于private类型的,所以覆盖这种概念根本不存在。
5.6 方法覆写的应用
可以去除多余的操作,而达到代码的重用
5.7 两种重要的比较
1、方法重载与覆写的区别
5.8 final关键字
使用final可以用作以下的声明:
1、声明类,声明的类不能有子类
2、声明方法:声明的方法不能被子类所覆写
3、声明变量:声明的变量就成为常量,常量是不可以修改的。
注意:1、在java中如果使用final声明一个常量的话,则常量的标识符必须全部大写。
2、在final中也存在一个很重要的概念:全局常量:使用public static final声明的常量称为全局常量。
5.9 抽象类
抽象类:包含一个抽象方法的类称为抽象类,抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract 关键字声明,所有的抽象类也需要使用abstract关键字声明。
抽象方法:public abstract void fun();
对于抽象类来讲,不能直接进行实例化的操作,但是可以声明,如果要想使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现抽象类中的全部抽象方法。
注意:抽象类不能用final声明,因为:
1、抽象类必须被子类继承
2、被final声明的类不能有子类
抽象类中允许有构造方法,但是此构造方法是不能直接调用的,是交给子类去调用的,子类对象的实例化过程中,永远是先调用父类中的构造方法。
实际上来讲,抽象类就是比普通类多了一个抽象方法而已。
抽象类中的属性如果想初始化,则肯定还是依赖与构造方法。
5.10 接口(重点)
接口是一个特殊的类,在java中接口是由抽象方法和全局常量组成。
使用interface定义一个接口。
接口与抽象类一样,需要有子类,那么子类此时不再称为继承类,而是实现接口。
通过implements关键字完成。
一个类虽然只能继承一个父类,但是一个类可以同时实现多个接口,使用接口完成多继承的能力。
如果一个类即要实现接口又要继承抽象类的话,则必须按照以下的形式完成:
Class 子类extends 抽象类implements 接口A,接口B……{}
一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类。
一个接口可以同时继承多个接口。
5.11 对象多态性(重要)
多太性是面向对象的最后一个特征:
1、方法重载和方法的覆写实际上就属于多态性的一种体现;
2、真正的多态性中还包含了一种称为对象多态性的概念。
对象多态性主要指的是,子类和父类对象的相互转换关系
向上转型:父类父类对象=子类实例→自动完成
向下转型:子类子类对象=(子类)父类实例→强制完成
Java中提供了instanceof关键字可以判断对象到底是哪个类的实例
格式:对象instanceof 类→返回boolean类型的数据,值就是true或false
为了保证对象的向下转型操作正确,在操作前最好加上instanceof关键字进行判断。
5.11 抽象类的应用
从对象多态性的概念上来看,子类为父类实例化是一个比较容易的操作,因为可以发生自动的向上转型关系,那么调用的方法永远是被子类覆写过的方法。
那么,此时就可以利用此概念通过对象多态性为抽象类实例化。
抽象类本身最大的用处就是在于模板设计
5.12 接口的应用
接口也可以像抽象类那样通过对象多态性进行对象的实例化操作。
接口实际上是作为一个标准存在的。
5.13 接口和抽象类
1、适配器设计模式
正常情况下一个接口的子类要实现全部的抽象方法
如果希望可以根据自己的需要来选择性的覆写,那就要先用一个抽象类将接口实现了,但是所有的方法都属于空实现,之后再继承此类。
2、工厂设计模式
3、代理设计模式
5.14 接口和抽象类的区别(重点)
5.15 Object类
在java中一切都是继承关系,如果一个类没有明确的指定继承那个父类,则默认情况下就是继承自Object类。
任何类对象都可以使用Object进行接收。
对于Object接收来讲,不光可以接收类的引用,只要是引用数据类型都可以使用Object类接收。
Object类的主要功能不止于此,对于一个完整的类来讲,应该覆写Object类中的以下三个方法:
1、toString():对象打印时调用public String toString()
2、equals():对象比较时调用,实际上String类就已经覆写好了此方法
3、hashCode(),暂时不看
5.16 注意点
子类对象的实例化过程:先去调用父类中的构造方法,之后再执行子类自己的构造方法
父类的构造方法执行完之后实际上是为父类中的属性初始化了,但是未执行完的话,子类的构造方法就永远不可能调用,那么,子类中的所有属性都无法初始化。
5.17 总结
1、继承的基本概念及各种使用限制
继承可以扩充已有类的功能,使用extends完成继承的操作。
Java中是使用单继承,一个子类只能继承一个父类。
2、this与super关键字的区别
3、重载与覆写的区别
4、子类对象的实例化过程
5、开发中记住一个原则:一个类永远不要去继承一个已经实现好的类,要么继承抽象类,要么实现接口,这个原则必须始终记住。
6、final关键字
全局常量:public static final
7、抽象类和接口的基本概念及应用
完全只是在代码结构上的应用
8、抽象类和接口的区别
9、Object类是所有对象的父类
toString()在对象打印时调用
equals()完成对象的比较操作
10、对象的多态性
向上和向下转型
如果要想进行向下转型,则首先必须产生向上转型的关系。