继承的含义
继承:就是子类继承父类的属性和行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
继承的好处
- 提高代码的复用性(减少代码冗余,相同代码重复利用)。
- 使类与类之间产生了关系。
继承的格式
通过 extends
关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {
...
}
class 子类 extends 父类 {
...
}
需要注意:Java是单继承的,一个类只能继承一个直接父类
继承的特点
子类继承父类的哪些内容
继承中成员变量的访问特点
1. 遵循就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上
若出现了重名的成员变量应该:
合理的运用this/super关键字
System.out.println(name);局部找
System.out.println(this.name);本类找
System.out.println(super.name);父类找
继承中成员方法的访问特点
就近原则
super
虚方法:非private 非static 非final修饰的的方法。
方法重写
应用场景:当父类的方法不能满足子类现在的需求,需要方法重写
书写格式:在继承体系中,子类出现了和父类中一摸一样的方法声明,就称子类这个方法是重写的方法
@Override重写注释
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确
2.语法错误则出现红色波浪线
本质:
子类覆盖从父类中继承的虚方法表中的方法
注意事项:
1.重写方法的名称,形参列表必须与父类一致
2.访问权限子类必须大于父类(空着不写<protected<public)
3.返回值类型子类必须小于等于父类
4.建议:重写的方法尽量和父类保持一致
5.只有添加到虚方法表中的方法才能被重写
继承中构造方法的访问特点:
1.父类的构造方法不会被子类继承
2.子类中的所有构造方法默认先访问父类的无参构造,在执行自己。(父类中的无参构造先默认初始化,因为子类在初始化的时候可能会使用到父类中的数据,若父类没有完成初始化子类将无法使用父类的数据)
调用父类的构造方法:
子类构造方法的第一行语句默认都是:super(),不写也存在,且必须在第一行
调用父类的有参构造,必须手动写super进行调用
this,super使用总结
this:理解为一个变量,表示当前方法调用者的地址
super:代表父类储存空间
标准的继承javabean
先找出共性,写父类
public class man {
private String id;
private String name;
private int price;
public man(){
}
public man(String id,String name,int price){
this.id=id;
this.name=name;
this.price=price;
}
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 int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public void eat(){
System.out.println("吃米饭");
}
public void work(){
System.out.println("Yuan");
}
}
厨师类
public class cook extends man{
public cook(){
}
public cook(String id,String name,int price){
super(id,name,price);
}
@Override
public void work() {
System.out.println("厨师在做饭");
}
}
经理类
public class manager extends man{
private int salary;
public manager() {
}
public manager(String id, String name, int price, int salary) {
super(id, name, price);
this.salary = salary;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public void work() {
System.out.println("管理其他人");
}
}
测试类
public class Test{
public static void main(String[] args) {
manager m=new manager("001","heima",5000,500);
System.out.println(m.getId()+","+m.getName()+","+m.getPrice()+","+m.getSalary());
m.work();
m.eat();
cook c=new cook();
c.setPrice(4000);
c.setId("009");
c.setName("wangwu");
c.work();
c.eat();
}
}