继承
格式:public class 子类名 extends 父类名 { }
继承中成员变量的访问特点:在子类方法中访问一个变量,先去子类局部范围找,再到 子类成员范围找,再到 父类成员范围找 如果都没有就报错(不考虑父亲的父亲…)
super关键字
super和this相似,this在当前类中使用,代表的时当前对象,super代表的是父类存储空间的标识,调用父类对象
super()调用的是父类的无参构造,this()指的是调用本类的无参构造
继承中构造方法的访问特点:子类初始化之前,一定要先完成父类数据的初始化,每一个子类构造方法的第一条语句默认都是:super()
继承中成员方法的访问特点:子类对象访问一个方法,现在 子类成员范围找,再到 父类成员范围找, 如果都没有就报错(不考虑父亲的父亲…)
方法重写
子类与父类的方法名,参数列表相同,子类修饰符大于或等于父类的修饰符,子类返回类型与父类返回类型相同
权限修饰符
状态修饰符
static(静态)
static 关键字是静态的意思,可以修饰成员方法,成员变量
static 修饰的特点:
被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
可以通过类名调用,当然,也可以通过对象名调用,推荐使用类名调用,在加载类的时候,被static修饰的变量,方法也会被加载
静态方法只能访问静态的成员变量和方法
final(最终态)
final 关键字是最终的意思,可以修饰成员方法,成员变量,类
final 修饰的特点:
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:表明该变量是常量,不能再次被赋值
修饰类:表明该类是最终类,不能被继承
final修饰的是基本类型:基本类型的数据值不能发生改变
final修饰的是引用类型:引用类型的地址值不能发生改变,但地址里面的内容可以该变
案列:
1.需求:定义老师类和学生类,然后写代码测试;最后找到老师类和学生类当中的共性内容,抽取出一个父类,用继承的方式改写代码,并进行测试
Staff类
public class Staff {
public String sid;
public String name;
public int salary;
public void work() {
System.out.println("工号为" + sid + ",工资为" + salary + "的" + name + "正在工作");
}
public Staff() {
}
public Staff(String sid, String name, int salary) {
this.sid = sid;
this.name = name;
this.salary = salary;
}
}
Manager类
public class Manager extends Staff {
public int bonus;
public Manager() {
}
public void work() {
System.out.println("工号为" + sid + ",工资为"+ salary +",奖金为" + bonus +"的"+ name+ "正在工作");
}
public Manager(String sid, String name, int salary,int bonus) {
super(sid,name,salary);
this.bonus = bonus;
}
}
Programmerl类
public class Programmer extends Staff {
public Programmer() {
}
public Programmer(String sid,String name,int salary) {
super(sid,name,salary);
}
}
StaffTest类
2.需求:请使用继承的思想设计出项目经理类和程序员类,并进行测试
Person类
public class Person {
public String name;
public int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Teacher类
public class Teacher extends Person {
public Teacher() {
}
public Teacher(String name, int age) {
super(name, age);
}
public void teach() {
System.out.println(age + "岁的" + name + "老师传授知识");
}
}
Student类
public class Student extends Person {
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
public void study() {
System.out.println(age + "岁的" + name + "学生学习知识");
}
}
PersonTest类