----------- android培训、java培训、期待与您交流!------------
1、继承的特点
Java中只支持单继承。并不直接支持多继承。
单继承:一个子类只能有一个父类。
多继承:一个子类可以有多个父类。不直接支持,对其进行改良。
继承层次多了,就形成了继承体系。
体系就是不断向上抽取而来的。
在使用一个体系的时候,先参阅最顶层类,了解体系的最基本功能。
使用时,创建该体系最底层类的对象。
看顶层,用底层。
什么时候使用继承呢?
当A类是属于B类中的一种时,就使用继承。
2、继承的好处
好处:1,提高了代码的复用性。
2,让类与类之间产生了关系,为多态特征提供了前提。
子类可以直接访问父类中的非私有的成员,间接访问私有成员通过方法的形式。
3、继承中子父类成员的特点
1、成员变量
super:代表的就是父类。
super的用法和this很相似。
用法 super.父类成员。 super(实际参数);
this:代表的是本类型对象的引用。
super:代表的是父类的内存空间。
子父类中出现同名成员变量时用super区分出父类变量。
但是这种情况很少出现。
2、继承中成员函数的特点
当子父类中出现一模一样的函数时。
出现了另一个函数特性:覆盖,复写,重写。
overload(重载):只关注本类中同名函数的参数列表。不关注返回值类型。
override(覆盖):子父类中一模一样的函数,才会覆盖。保留父类功能声明,建立子类功能内容,这就是覆盖。
覆盖注意事项:
1,子类覆盖父类方式,必须要保证子类方法权限大于等于父类方法权限。
2,静态只能覆盖静态,或者被静态覆盖。
覆盖就是沿袭了父类功能的声明,其实是创建了子类的内容而已,内容是子类的,声名是父类的。
3、子父类中构造函数的特点:
子类的实例化过程:
子类的所有构造函数中的第一行都有一条默认的隐式语句 super();
super():用来调用父类中的空参数的构造函数。
子父类的成员对象都在子类对象的堆内存空间中
子类对象一创建,父类的变量就会存在
为什么子类中都要有默认super语句呢?
因为子类对象中会存储父类中的属性数据,必须要对子类对象初始化时,
先执行父类的初始化动作,看看父类是如何对自己的属性数据进行初始化的。为了给父类的变量进行初始化
所以,子类的所有构造函数默认第一行(因为初始化动作要先执行,所以定义在第一行)
都有一条默认的super()语句。
如果父类中没有定义空参数的构造函数,子类构造函数必须通过super语句或者this语句指定要访问的构造函数。
类本身就是现实生活中对象共性内容的抽取
4、final关键字:
1,修饰符,修饰类,方法,各种变量。
2,final修饰类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能赋值一次。
对固定不变的值进行名称的定义 。提高其阅读性。
final修饰的常量 命名规则 所有字母都大写。多个单词,单词间用_连接。
5、抽象类
类是用来描述事物,当没有足够的信息去描述一个事物时,这个描述就是抽象的。
1、抽象类的特点:
1,抽象方法只有声明,没有方法体。
2,抽象方法一定定义在抽象类中,都需要被abstract关键字修饰。
3,抽象类不可以用new创建对象。
4,抽象类必须有自己的子类覆盖了所有的抽象方法后,该子类才可以被实例化。
否则,该子类还是一个抽象类。
2、抽象类一定是个父类?
是,抽象类不具体,需要子类将其具体化,并实例化。
3、抽象类中有构造函数吗?
有。用来给子类进行对象初始化。
抽象类和一般类有什么区别呢?
相同点:都是用来描述事物的,内部都可以定义属性,行为,构造器。
区别:抽象类中可以定义抽象方法。不可以实例化。因为不具体。
一般类中不可以定义抽象方法,可以实例化。
4、抽象关键字不可以和哪些关键字共存?
final,
private,
static,如果静态可以存在,这个成员就不需要对象了,可以用类名直接调用,但是方法没有主体,是没有意义的,
5、抽象类中是否可以不定义抽象方法?
可以的。这样做仅为不让该类实例化。
6、接口
如果一个抽象类的方法都是抽象的,
这时可以将抽象类用另一种形式来体现。就是接口。
接口定义的关键字就是 interface
子类必须实现了接口中所有的抽象方法后,子类才可以实例化。否则,该子类是一个抽象类。
1、接口中成员的定义:
常见成员有两种:
1,全局常量。
2,抽象方法。
接口中的成员都是public的。
2、接口的好处
是将多继承进行改良,用多实现进行体现。
一个类只能继承一个类,
但是一个类可以实现多个接口。
另一个体现。
一个类在继承另一个类的同时,还可以实现多接口。
接口的出现避免了单继承的局限性。
3、类与类之间存在继承是为什么呢?
类当中有一些定义好的东西,另外一个类直接继承就能拿过来用,叫继承
4、java改良多继承的原因?
多继承不能存在的原因是调用的不确定性,多个父类出现了一模一样的功能,但是功能的内容却不一样。
多实现解决了以上的问题,因为接口中的方法没有方法体,即使出现相同函数只需要在子类实现一次即可,就完成了所有父类方法的覆盖。
5、先继承再多实现
继承的是主体功能,接口都是扩展功能,基于主题功能需要的扩展功能。一个程序想具备扩展性必须使用接口
6、java支持多继承吗?
对于类多继承是用多实现的方式来体现的,在类上不能直接支持,会产生调用的不确定性。
但是,接口之间支持多继承。接口的方法是没有主体的,所以多继承变成多实现,在接口上,多继承依然存在。
7、接口的思想
接口就是生活中的一种规则,降低了耦合性,提高了扩展性,实现了模块式的开发。
接口是在降低耦合性,所以会有两方,一方在使用接口,一方在实现接口
封装性:把实现细节封装,对外暴露规则