1.构造方法是否可以被继承?
父类的构造方法不可以被子类继承;
2.对于成员变量来说,不论是私有的还是非私有的,子类都可以继承;
只不过非私有的子类不可以直接用;
3.继承中,成员变量和成员方法访问的特点:
(一)成员变量的访问特点:
遵循就近原则;super指父类;
class Fu{
String name="Fu";
String hobby="喝茶“;
}
class Zi extends Fu{
String name="Zi";
String game="吃鸡";
public void shou(){
System.out.println(this.name);//Zi
System.out.println(super.name);//Fu
System.out.println(super.hobby);//喝茶
System.out.println(this.game);//吃鸡
}
}
总结来说,继承中成员变量访问特点就是先在局部位置找,本类成员位置找,父类成员位置找,逐级往上找。
(二)成员方法的访问特点:
直接调用满足就近原则,谁离我近我就用谁;
super调用,直接访问父类;
4.方法的重写
当父类的方法不能满足子类心在的需求时,需要进行方法重写;
书写格式:在继承体系中,子类出现了和父类一摸一样的方法声明,我们就称子类这个方法是重写的方法;
@Override重写注解:
@Override是放在重写后的方法上,校验子类重写时语法是否正确;
重写方法的名称,形参列表必须与父类中的一致。
建议:重写的方法尽量和父类保持一致;
只有被添加到虚方法表中的方法才能被重写;
方法重写的本质也就是覆盖虚方法中的方法;
5.继承中,构造方法的访问特点总结
子类不能继承父类的构造方法,但是可以通过super调用;
子类构造方法的第一行,有一个默认的super();
默认先访问父类中的无参的构造方法,再执行自己;
如果想要方法文父类有参构造,必须手动书写;把赋的数据写到小括号里。
6.this ,super使用总结
this:可以理解为一个变量,表示当前方法调用者的地址值;
super:代表父类存储空间;
访问成员变量:this/super.成员变量
访问成员方法:this/super.成员方法(....)
访问构造方法:this/super(....)
this访问本类,super访问父类;
7.练习:带有继承结构的标准javabean类
public class Employee {
//1.见名知意
//2.所有的成员变量都需要私有
//3.构造方法(空参,带全部参数的构造)
//4.get/set
private String id;
private String name;
private double salary;
public Employee() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public void work(){
System.out.println("员工在工作");
}
public void eat(){
System.out.println("吃米饭");
}
}
public class Cook extends Employee{
public Cook() {
}
public Cook(String id, String name, double salary) {
super(id, name, salary);
}
@Override
public void work() {
System.out.println("厨师正在炒菜");
}
}
public class Manager extends Employee {
private double bouns;
public Manager() {
}
public Manager(String id, String name, double salary, double bouns) {
super(id, name, salary);
this.bouns = bouns;
}
public double getBouns() {
return bouns;
}
public void setBouns(double bouns) {
this.bouns = bouns;
}
@Override
public void work() {
System.out.println("管理其他人");
}
}
public class Test {
public static void main(String[] args){
//创建对象并赋值调用
Manager m=new Manager("001","张三",15000,80000);
System.out.println(m.getId()+","+m.getName()+","
+m.getSalary()+","+m.getBouns());
m.work();
m.eat();
Cook c=new Cook();
c.setId("002");
c.setName("李四");
c.setSalary(8000);
System.out.println(c.getId()+","+c.getName()+","
+c.getSalary());
c.work();
c.eat();
//001,张三,15000.0,80000.0
//管理其他人
//吃米饭
//002,李四,8000.0
//厨师正在炒菜
//吃米饭
}
}