首页 > 代码库 > 继承、抽象类和接口
继承、抽象类和接口
继承
1、提高了代码的复用性。
2、让类与类之间产生了关系。有了这个关系才有了多态的特性。
查阅父类功能,创建子类对象使用功能
继承的特点:
重载
对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系。这里有两个问题需要注意:
(1)什么叫参数列表?参数列表又叫参数签名,指三样东西:参数的类型,参数的个数,参数的顺序。这三者只要有一个不同就叫做参数列表不同。
(2)重载关系只能发生在同一个类中吗?非也。这时候你要深刻理解继承,要知道一个子类所拥有的成员除了自己显式写出来的以外,还有父类遗传下来的。所以子类中的某个方法和父类中继承下来的方法也可以发生重载的关系。
覆盖
也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。
当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。
发生覆盖的条件:
1、“三同一不低” 子类和父类的方法名称,参数列表,返回类型必须完全相同,而且子类方法的访问修饰符的权限不能比父类低。
2、子类方法不能抛出比父类方法更多的异常。即子类方法所抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出;
3、被覆盖的方法不能是final类型的。
4、被覆盖的方法不能为private。
5、被覆盖的方法不能为static。
子父类中变量的特点
变量
如果子类中出线非私有的同名成员变量,用this;
子类要访问父类中的同名变量,用super;
super的使用和this的使用几乎一致,this代表本类对象的引用,super代表父类对象的引用。
子父类中的构造函数
在对子类对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数第一行默认有一条隐士语句super();super()会访问父类中的空的构造函数,而且子类中所有的构造函数默认第一行都是super().
final :1、可以修饰类,方法,变量(为了避免被继承,被子类复写)
2、修饰的类不可以被继承
3、修饰的方法不可以被覆盖
4、 修饰的变量是一个常量,只能被赋值一次,既可以修饰成员变量,也可以修饰局部变量
5、当在描述事物时,一些数据的出现值时固定的,不需要改变的。所以加上final修饰。
6、内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
抽象类
关键字:abstract
当多个类中出现了相同功能,但是功能主体不同,也可以进行向上抽取,此时只抽取功能定义,而不抽取功能主体。
特点:
1、抽象方法一定定义在抽象类中;
2、抽象方法和抽象类都要被关键字abstract 修饰;
3、抽象类不能new创建对象,因为调用抽象方法没有意义;
4、抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分了抽象方法,该子类也还是抽象类。
模版设计模式
在定义功能时,功能的一部分是确定的 ,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分提供出去,由子类去完成。
接口
一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
关键字:interface
格式特点:
1、接口中常见定义:常量,抽象方法;
2、接口中的成员都有固定修饰符。
常量:public、static、final
方法:public abstract
总结:接口中的成员都是public 的;接口时不可以创建对象的,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
被类多实现:interface Inter1{
}
interface Inter2{
}
class Test implements Inter1,Inter2{
}
接口的特点:
接口是对外暴露的原则;
接口是程序的功能扩展;
接口可以用来多实现;子类可同时继承其他父类;
类与接口至简是实现关系,而且类可以继承一个类的同时实现多个接口;
接口与接口之间可以有继承关系;
继承、抽象类和接口