继承
/*
继承就是共性抽取
在继承的关系中,“子类就是一个父类”。也就是说,子类可以当做一个父类来看待
public class 子类名称 extends 父类名称{}
私有属性不会被继承;
局部变量,成员变量,父类变量同名的情况:
局部变量:直接使用变量名;
本类成员变量:this.成员变量名;
父类变量:super.成员变量名;
在父子类的继承关系里,创建子类对象,访问成员方法的规则:
创建的是谁,就优先用谁,如果没有,就向上找;
无论是成员变量还是成员方法,如果没有,都是向上找不会向下找子类的;
重写和重载的区别:
重写(覆盖):方法名称一样,参数列表也一样;
重载:方法名称一样,参数列表不一样;
方法覆盖的注意事项:
1.父子类的方法的名称必须相同,参数列表也相同。
把@Override写在覆盖方法前面,能有效检测方法是否正确覆盖重写
2.子类的返回值范围必须【小于等于】父类的范围。
比如:String小于Object
3.子类方法的权限必须【大于等于】父类方法的权限
public>protected>(default)>private
(default)是指什么都不写,不是关键字
*/
例如:
创建一个Person父类:
public class Person {
String name;
int age;
int id;
String address="贵州省遵义市绥阳县";
public void method1(){
System.out.println("父类方法1");
}
}
子类Student和Teacher类继承Person类
public class Student extends Person {
public Student(String name,int age,int id) {
this.name=name;
this.age=age;
this.id=id;
}
String address="贵州省遵义市";
public void method2(){
String address="贵州省";
System.out.println("这是子类的方法");
System.out.println(address);
System.out.println(this.address);
System.out.println(super.address);
}
}
Teacher类:
public class Teacher extends Person {
String address="";
public Teacher(){
}
public void method2(){
System.out.println("这是老师可以教学生的方法");
}
}
在继承中注意:
对于已经使用过的类,尽量不要修改,推荐定义一个新的类,来重复利用共性的内容,并添加改动的新内容
super关键字。用于子类继承父类的变量或方法
继承关系中,父子类构造方法的特点:
1.子类的构造方法当中有一个默认隐含的“super()”调用,所以一定先调用父类的构造方法,在执行子类的构造方法
2.子类构造可以通过super关键字来调用父类重载构造
3.super的父类构造调用,必须是子类构造方法的第一句,不能一个子类构造调用多次super构造
super关键字的三种使用方法:
1.在子类成员方法中,访问父类的成员变量;
2.在子类的成员方法中,访问父类的成员方法;
2.在子类的构造方法中,访问父类的构造方法;