1.继承:
(1)将不同类中的共性描述提取出来,单独进行描述,只要让各类与单独描述的这个类有关系即可。class Xxx extends Yyy
(2)提高了代码的复用性。
(3)让类与类之间产生了关系,有了这个关系,才有了多态的特性。
(4)不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有所属关系才可以继承。所属关系:is a。猫、豹、虎——>猫科
(5)java中只支持单继承,不支持多继承。(只继承一个类)因为多继承容易带来安全隐患。当多个父类中定义了相同的功能,但功能内容不同时,
子类对象不确定要运行哪一个。但是java保留了这种机制,并用另一种形式来完成表示,多实现。java还支持多层继承。B继承A,C再继承B。
2.继承体系的使用:
(1)先查阅体系父类的描述,因为父类中定义的是该体系的共性功能,通过了解共性功能,就可以知道该体系的基本功能,那么这个体系已经基本可以使用了。
(2)在具体调用时,要创建最子类的对象。
原因:a,因为父类有可能不能创建对象。b,创建子类对象可以使用更多的功能,包括基本的,也包括特有的。
简单的说就是:查阅父类功能,创建子类对象使用功能。
3.super:超类,父类。super.成员,调用父类的成员。
如果子类中出现与父类同名的非私有的成员变量,子类要访问本类中的变量,用this(可省略),子类要访问父类中的变量用super。
4.子父类中的函数:
当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。
这种情况是函数的另一个特性:重写(覆盖)
当子类继承父类,沿袭了父类的功能到子类中,子类虽然具备了该功能,但是功能的内容却和父类不一致,这时,没有必要定义新功能,而是使用覆盖,
保留父类功能的定义,并重写功能内容。
注意:子类覆盖父类,必须保证子类权限大于或等于父类权限,否则编译失败。静态只能覆盖静态。当父类方法被private修饰时,则不存在覆盖。
注意:
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样。(权限可以不一样,子类大于或等于父类权限)
子父类中构造函数不能覆盖,不同名。
this();调用本类构造函数
super();调用父类构造函数
子类的构造函数默认第一行有一个隐式的语句super();
super语句一定定义在子类构造函数的第一行。(初始化动作要先执行)
子类一定要访问父类中的构造函数,因为父类中的数据子类可以直接获取,所以子类对象在建立的时候,需要先查看父类是如何对这些数据进行初始化的。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
结论:子类的所有构造函数,默认都会访问父类中空参数的构造函数,因为子类每一构造函数的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来访问父类中的构造函数。
当然,子类的构造函数的第一行也可以指定this语句来访问本类中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数。
5.final关键字:最终,作为一个修饰符。
(1)可以修饰类,函数,变量。
(2)被final修饰的类不能被继承。
(3)被final修饰的方法不能被覆盖。
(4)被final修饰的变量是一个常量。
当在描述事物时,一些数据的出现是固定的,这时为了增强阅读性,都给这些值起一个名字,方便阅读,而这个值不需要改变,所以加上final修饰。
(5)内部类定义在类中的局部位置上时,要访问该局部的局部变量时,该局部变量必须变final修饰。
6.抽象函数
当多个类中出现相同功能,但功能主体不同,这时可以进行向上抽取,只抽取功能定义,不抽取功能主体。用abstract修饰该函数。
abstract void Xxx();抽象方法必须定义在抽象类中。
7.抽象类的特点:
(1)抽象方法一定定义在抽象类中。
(2)抽象方法和抽象类都必须被abstract关键字修饰。
(3)抽象类不可以用new创建对象,因为调用抽象方法是没有意义的。
(4)抽象类中的方法要被使用,必须由子类复写其所有抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
抽象类(成员函数不一定是抽象的)和一般类没有太大区别,该如何描述事物就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出来,但是无法定义主体,通过抽象方法来表示。
抽象类比一般类多了抽象函数,抽象类不可以实例化。抽象类可以不定义抽象方法,这样做仅仅是不让该类建立对象。
8.接口:Interface定义接口,class定义类
初期理解,可以认为是一个特殊的抽象类,当抽象类的方法都是抽象的,那么该类可以通过接口的形式来表示。
9.接口定义时格式特点:
(1)接口常见定义:常量,抽象方法
(2)接口中成员都要固定修饰符。常量:public static final 方法:public abstract
接口:不可以创建对象,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法都覆盖后,子类才可以实例化,否则子类是一个抽象类。
接口可以被类多实现,一个类可以实现多个接口。一个类在继承一个类的同时还可以实现多个接口。接口可以继承接口,接口之间存在多继承,因为没有方法体。
10.接口的特点:
(1)接口是对外暴露的规则。
(2)接口是程序的功能扩展。
(3)接口可以用来多实现。
(4)降低耦合性,依赖性降低。
(5)类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
(6)接口与接口可以有继承关系。
11.模板方法设计模式:
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
package myclass;
abstract class GetTime
{
public final void getTime()
{
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("Millis:"+(end-start));
}
abstract void runcode();
}
class GetPrintTime extends GetTime
{
void runcode()
{
int sum = 0;
for(int i=0; i<=100; i++)
{
sum += i;
System.out.println("i="+i+",sum="+sum);
}
}
}
class Demo
{
public static void main(String[] args)
{
GetPrintTime gt = new GetPrintTime();
gt.getTime();
}
}