1.继承:提高代码的复用性;类与类之间产生关系,提供了多态的前提(。。)
为什么Java不支持多继承:当一个类同时继承两个父类时,两个父类有相同的功能,子类对象调用该功能时产生错误
但是Java支持多重继承,A继承B,B继承C,C继承D,多重继承意味着继承是有体系的,体系中的顶层父类是通过不断向上抽取而来
简单来说:对于一个继承体系的使用,查阅顶层父类的内容,创建最底层子类的对象
子类成员特点:
1.成员变量:子父类中出现一样的属性,子类对象调用该属性时,值是子类的属性值,如果要调用父类的属性值使用super关键字
2.成员函数:当子父类出现一模一样的方法,建立子类对象会运行子类中的方法也就是覆盖了父类的方法。
3.构造函数:子类构造函数的第一行其实都有一条隐身的super()语句
注意:子类所有的构造函数都会默认访问父类的空参构造函数,如果父类没有空参构造函数那么子类构造函数内必须通过super语句指定访问的父类的构造函数
super()和this()是否可以同时出现构造函数中?
两个语句只能有一个定义在第一行,所以只能出现其中一个;为何一定要定义在第一行,super()或者this()都是调用构造函数,构造函数用于初始化,所以初始化的动作先完成
方法覆盖需注意:子类覆盖父类需保证子类方法的权限大于等于父类方法的权限;覆盖时要么都静态要么都不静态,静态只能覆盖静态,或者被静态覆盖。
继承的弊端:打破封装性。对于一些类或者类里面的功能,是需要被继承或者复写的
2.final特点:
1.修饰符。修饰类,方法,变量
2.最终类,不可以被继承
3.最终方法,不可以被覆盖
4.常量,只能赋值一次
3.抽象类:abstract
特点:1.抽象方法定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰
2.抽象方法只定义方法声明,并不定义方法实现
3.抽象类不可以被创建对象(实例化)
4.只有子类继承抽象类并覆盖了抽象类的所有抽象方法,子类才可以实例化,否则该子类还是抽象类
抽象类细节:
1.抽象类是否有构造函数:有,用于给子类对象进行初始化
2.抽象类是否可以定义非抽象方法:可以,抽象类比一般类多了抽象函数,但是比一般类少了一个创建对象的部分
4.抽象类的关键字abstract和哪些关键字不能共存:final,private,static
5.抽象类是否可以定义抽象方法:可以抽象方法目的就是为了不让该类创建对象
6.模板方法设计模式: