---------------------- android培训、java培训、期待与您交流! ----------------------
继承(extends):
1,提高了代码的复用性
2,让类与类之间产生了关系,所以才会有多态。
注意:千万不要为了获取其他的功能,而简化代码继承。
必须是类与类之间有所属关系才可以继承。is a。
java只支持单继承,不支持多继承。
多继承隐患:父类定义相同功能时,但内容不同,子类不确定运行那一个。
但java用另一种体现形式来完成,多实现。
java支持多层继承,一个继承体系。(子类必须继承父类的所有功能和变量)
想使用体系,先查阅体系中父类的描述。父类中是共性的功能。
在具体调用时,要创建最子类的对象,为什么呢?1,
1,有可能父类不能创建对象。
2,创建子类对象可以使用更多的功能。基本和共有的
聚集:has a
1,变量
如果子类中出现非私有的同名成员变量时.
子类要访问本类中的变量,用this,
子类要访问父类中的同名变量,用super.
覆盖:
1,子类覆盖父类,子类权限必须大于或等于父类,才可以覆盖(父类及其功能不能私有不然不能覆盖)
2,静态只能覆盖静态。
重载:看同名函数的参数列表。
重写:子父类方法一模一样。
为什么子类一定要访问父类中的构造函数。
因为父类中的数据子类可以直接获取,所以子类子类对象在建立时,需要
先查看父类中如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
子类的实例化过程。
结论:
子类的所有的构造函数,默认都会访问父类中的空参数函数。
因为子类每一个构造函数内第一行都有一句隐式的super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数
子类中至少有一个构造函数会访问父类中的构造函数。
抽象类的特点:(多个类出现相同功能,但功能主体不同,进行抽取,这时只抽取功能定义,而不抽取功能主题)
1,抽象方法一定在抽象类中。
2,都被abstract修饰
3,抽象类不可以用new创建对象(不能实例化),因为调用抽象方法没意义。
4,抽象类中的抽象方法必须由子类复写所有的抽象方法后建立子对象
如果只覆盖了部分抽象方法,那么该子类还是一个抽象类。
格式:
abstract class Student
{
abstract void study();
}
抽象类中可以不定义抽象方法,这样做仅仅是为了不让该类建立对象。
模版方法设计模式
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分
那么这时就将不确定的部分暴露出去,由该类的子类去完成。
例子:
abstract class GetTime
{
public final(这个代码不用复写,所以加上final) void getTime()
{
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMills();
System.out.println("毫秒:"+(end-start));
}
public abstract void runcode();
}
class SubTime extends GetTime
{
public void runcode()
{
for(int x=0; x<4000;x++)
{
System.out.print(x);
}
}
}
接口:
1,接口中常见的定义:常量,抽象方法.
2,接口中的成员都有固定的修饰符
常量:public static final
方法:public abstract
3,接口对外暴漏,是程序的功能扩展。
记住:接口中的成员都是public的 实现的子类的成员的也是public
接口:不可以创建对象,因为有抽象方法、
需要被子类全部实现,不然子类仍是一个抽象类.
接口子类支持多实现,接口与接口之间间还可以多继承,子类还可以继承一个类时实现接口。
---------------------- android培训、java培训、期待与您交流! ---------------------