面向对象进阶(继承)

本文详细介绍了Java中的继承概念,包括其好处、格式以及访问特点,如成员变量的就近原则、方法重写的应用场景和规则、构造方法的调用等。并通过实例展示了厨师类和经理类对父类方法的重写。
摘要由CSDN通过智能技术生成

继承的含义

继承:就是子类继承父类的属性行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

继承的好处

  1. 提高代码的复用性(减少代码冗余,相同代码重复利用)。
  2. 使类与类之间产生了关系。

继承的格式

通过 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();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值