继承的概念:
在现有类的基础上取创建一个新的类,新的类叫做子类,原先的类叫做父类。子类会自动拥有父类可继承的属性与方法。
格式:class 子类 extends 父类
继承的好处:
1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了多态的前提。
注意事项:
只允许单继承,不允许多继承。
class A{}
class B{}
class C extends A,B{} 不被允许。
继承子父类中成员变量的特点:
子类访问成员变量,子类有用自己的,没有用父类的。父类中的成员变量是非私有的,子类中可以直接访问,若父类中的成员变量私有了,子类是不能直接访问的。当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用 关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用。
格式:super.父类中的成员变量。
继承子父类中的成员方法特点(重写):
当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
成员方法特殊情况——覆盖子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。
方法重写的概念:
在子父类中,子类中出现了与父类的返回值类型,方法名,形参列表,一模一样的方法就叫做放方法的重写,覆盖。
方法重写(覆盖)的应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
方法重写的注意事项:
1:子类方法覆盖父类方法,必须要保证权限大于等于父类权限(public>protcted>default>private)。
2:写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。
总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。
抽象类的概念:
某些父类从子类抽取出来的相同的一些方法就叫做抽象类。
格式:abstract class 类名 {}
抽象类一定是个父类,不能和Private关键字共存。
抽象方法:
分析事物时,发现了共性内容,就会向上抽取。只抽取方法声明,不抽取方法主体。
格式:public abstract 返回值类型 方法名(参数);
抽象类的特点:
1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单
接口的概念:
接口是功能的集合,本质上还是一个类,只描述应该具备的方法,并没有具体实现,没有方法体,是比类更为抽象的类。接口将功能的实现与定义分离,优化了程序设计。也就是说接口只有方法声明。
定义格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
} 接口中的方法均为公共访问的抽象方法,接口中无法定义普通的成员变量。同时,接口中的方法全部用public abstaract 修饰,eclipse会自动补齐。可以省略不写。
类实现接口:
类与接口的关系为实现关系,即类实现接口,其他类(实现类)实现接口后,就相当于声明“我应该具备这个接口中的功能。”实现类仍然需要重写方法实现以实现具体的功能。
格式:
class 类 implements 接口 {
重写接口中方法
} 也就是说在接口中只是声明功能,在类中则是具体实现了这个功能。
类和类之间的关系:一定是单继承关系。
类和接口之间的关系:实现关系(类实现接口)implements。
接口和接口之间的关系:继承关系(可以多继承),接口 extends 接口。
接口中成员的特点:
1:接口中可以定义变量,但是必须有固定的修饰符修饰,public static final 数据类型 变量名。
public :公共的,任何人在任何地方都可以使用。
static:被static修饰的成员变量,方法。都可以用类名.成员名调用。
final:最终的,被final修饰的量叫做常量,一次赋值,终身不变。
2:接口中也可以定义方法,固定的修饰符,public abstract
3:接口不可以创建对象。
4:子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类就是一个抽象类。
接口的多实现:
接口最重要的体现,解决多继承的弊端。因为多继承时,父类有相同的功能(方法)时,子类调用会产生不确定性。也就是说多继承父类时,功能有主体,而导致运行时,不确定运行那些内容。也就是说因为接口中的功能都没有方法体,由子类确定。
类继承类同时实现接口:
当一个子类已经继承了父类,又需要扩展额外的功能,这是就可以通过接口来实现。接口的出现避免了单继承的局限性,也就是说父类定义的基本功能,接口定义事物的扩展功能。
接口的多继承:
接口可以多继承,通过关键字extends来实现。也就是说由于接口中的方法时抽象方法,没有方法内容,也就是{ },子类实现后也不会发生调用的不确定性。
接口的好处:
1:接口的实现扩展了功能。
2:接口其实就是暴露出来的规则。
3:接口的出现降低了耦合性,及设备与设备之间实现了解耦。
接口与抽象类的区别:
相同点:
1:都位于继承的顶端,用于被其他类实现或继承。
2:都不能直接实例化对象。
3:都可以包含抽象方法,其子类必须覆写这些方法。
不同点:
1:抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性,接口只能包含抽象方法。
2:一个类只能继承一个直接父类(如抽象类),却可以实现多个接口。
3:抽象类是这个事物中应该具备的内容,继承体系是 is a 的关系。
4:接口是这个事物中额外的内容,继承体系是一种like a的关系。
二者的选用,优先选择接口类,需要定义子类的行为,又要为子类提供共性功能时,才选用抽象类。