继承
1.extends:java只支持单继承,不支持多继承
java支持多层继承
谁是谁的一种
2.this代表本类对象的引用,super代表父类对象的引用
聚集
聚集:has a
聚合:
覆盖(重写)
当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。
可以利用覆写提高程序的扩展性
注意:
1.子类覆盖父类,必须保证子类权限大于等于父类权限才可以覆盖(子void父void,子public父public),否则编译失败
2.静态只能覆盖静态
重载:只看同名函数的参数列表
重写:子父类方法要一模一样
子父类构造函数
1.在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式语句super(),它会访问父类中空参数的构造函数。而且子类中所有中构造函数默认第一行都是super()
2.为什么子类一定要访问父类中的构造函数
因为父类的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来定义。
3.结论:子类所有的构造函数默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式super();当父类中。
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。
final
1.final作为一个修饰符可以修饰类,函数,变量
2.被final修饰的类不可以被继承
3.被final修饰的方法不可以被覆写
4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。当描述事物是,一些数据的出现是固定的,那么这时为了增强阅读性,都给这些值起个名字,方便于阅读。eg:final double pie=3.14
抽象
1.抽象方法一定在抽象类中
2.抽象方法和抽象类都必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。
abstract class student
{
abstract void study();
}
需要明确出现但无法定义主体
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
接口 interface
接口定义时,格式特点
1.接口中常见定义:常量,抽象方法
2.接口中成员都有固定修饰符
常量:public static final
方法:public abstract
记住:接口种的成员都是public的
3.子类是implement
4.接口是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后, 子类才可以实例化,否则子类是一个抽象类。
5.接口的特点:
a.接口是对外暴露的规则
b.接口是程序的功能扩展
c.接口可以用来多实现
d.降低了耦合性
6.接口可以用来扩展