类的继承
语法:
class 子类 extends父类{
子类的属性;
子类的方法;
}
继承的特点:
1. 如果某些类有共同的属性和行为,可以使用继承来实现;
2. 子类会把父类的所有属性继承,同时子类还可以有自己的属性和方法;
3. 父类更通用,子类更具体;
4. 子类只能获得父类中的非private属性,如果想要继承private属性就要提供公共的set和get方法,私有方法无法继承;
5. java中只能做单继承:如class A extends B{}(区别多继承:class A extends B,C)
6. java支持多级继承:如class A extends B{}
class C extends A{}
继承的好处:提高代码的复用性
继承的内存图
通过继承之后的子类实例化后,当用到属性的时候,现在子类的本类(this)中找,找不到再去父类(super)中找。
super关键字
super调用必须在第一行的语句,与this类似。
1. 子类实例化时先调用父类的构造器,再调用子类的构造器。
2. 子类的构造器被调用的时候,父类的默认构造器就会被调用,如果父类存在有参数的构造器,一定要把默认的无参构造器显式的定义出来。
3. 子类在调用父类的有参数的构造器时,使用super(参数列表),父类的默认无参构造器不会再调用。
4. super可以表示父类的引用。可以使用super和this用来区分父类和子类中的同名属性和方法。在子类中访问属性(方法)时,现在子类中找,再在父类中找。
对比this关键字:
1. 代表当前类所指定的实例的引用;
2. 区分同名的属性和变量;
3. 可以调用同类中的构造器;
4. 调用本类中的属性和方法。
方法的重写/复写(override)
父类和子类有相同的方法:相同的方法名、参数个数和类型、返回值,方法体可以不同,子类会覆盖父类的同名方法,所以外部调用的方法一定是子类的方法。
※※重写与重载的区别
重写:在继承中,父子类有除方法体不同之外其他都相同的同名方法。一般是父类的该方法满足不了子类的需求导致。
重载:在同一个类中,两个方法名相同,参数个数或者参数类型不同。目的:节省类中的命名资源和提高代码的可读性。
final关键字
1. 方法:这个方法不能被重写
权限修饰符 final 返回值类型 方法名(参数列表){
}
2. 属性:属性值不能再改变à常量
权限修饰符 [static]final 数据类型 属性名 = 值
属性名:一般采用大写,多个单词使用下划线来分隔,而且这种常量多定义在接口中。
3. 类:不能被继承
final class 类名{
属性
方法
}
抽象类
抽象方法概念:
当多个具体的实体类存在着共同的行为,但是有不同的表现,我们在父类继承过程中父类的方法具体实现不同确定,但是能确定的是他们都有这种行为。把这种行为方法作为抽象方法。
特点:
1. 抽象类无法实例化;
2. 必须被子类继承才能使用子类实例化;
3. 继承了抽象类的非抽象子类必须实现抽象类的所有抽象方法;
4. 抽象类也可以继承抽象类,就不需要父抽象类的方法;
5. 抽象类的抽象方法不能共存的关键字:private,final,static。
抽象类中可以没有抽象方法,但是有抽象方法的一定是抽象类。