2020.6.18 20:29
继承
继承是面向对象的三大特征之一,可使得子类具有父类的属性和方法,也可在子类中重新定义以及追加属性和方法。
格式:通过extends来实现
注意点:继承只能单继承,通俗说父亲只能有一个。
例如:class A extends B{ … }
class 子类 extends 父类{ ... }
class student extends people{ … }
继承的好处:
- 使得类与类之间产生关系,父子关系,子类可使用父类中的非私有成员。
- 提高代码的复用性,多个类相同的成员可以放到同一个类中。
- 提高代码的维护性,只需修改一处即可。
弊端:类之间产生了关系,增强了类的耦合性,当父类发生改变时,子类中的实现也会随着变化,削弱了子类的独立性。
super和this关键字
this代表本类对象的引用。
super代表父类存储空间的标识。
this.成员变量---->访问本类成员变量
super.成员变量---->访问父类成员变量
构造方法:
this(…):访问本类的构造方法
super(…):访问父类的构造方法
子类所有的构造方法都会默认访问父类中的无参构造方法。
方法重写
子类出现和父类中一模一样的方法声明,方法名一样,参数列表也必须一样。
子类需要父类中的功能,还可有自己定义的特有内容。
Override注解:【检验】当前方法是否为重写的方法。
方法重写注意事项:
- 私有方法不能被重写
- 子类方法的访问权限不能更低(public > 默认 > 私有)
public class Fu {
private void show() {
System.out.println("Fu中show()方法被调用");
}
void method() {
System.out.println("Fu中method()方法被调用");
}
}
public class Zi extends Fu {
/* 编译【出错】,子类不能重写父类私有的方法*/
@Override
private void show() {
System.out.println("Zi中show()方法被调用");
}
/* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
@Override
private void method() {
System.out.println("Zi中method()方法被调用");
}
/* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
@Override
public void method() {
System.out.println("Zi中method()方法被调用");
}
}
final关键字
修饰基本数据类型变量:数值不能发生改变
修饰引用数据变量时:引用类型的地址值不能发生改变,内容可变。
public static void main(String[] args){
final Student s = new Student(23);
s = new Student(24); // 错误
s.setAge(24); // 正确
}
static关键字
static表示静态,可修饰【成员方法】和【成员变量】
可使用类名和对象名来调用。推荐使用类名调用。
重点:
- 非静态的成员方法:能访问静态的成员变量、非静态的成员变量、静态的成员方法、非静态的成员方法。
- 静态的成员方法:能访问静态成员变量、静态的成员方法
总结:静态成员方法只能访问静态成员。