java-继承

继承

一.继承的定义,为什么继承
1.通过拓展一个类来建立另外一个类的过程称为继承,java中所有的类都来源于"一个神通广大的类"Object.
2.在继承中,子类就是一个父类
3.通过继承不仅可以拓展父类功能,也可以实现代码复用(不同子用父的方法)
4.继承中的注意事项
0.子类方法访问父类私有变量时,必须调用父类方法.
在这里插入图片描述

总结:
成员变量不重名,子方法引用一个成员变量时,是谁的,就用谁的,没有往上找,如果是私有的,调用要用相关方法调用
成员变量重名时,使用this supper来进行区分,当涉及到私有时,要使用相应的方法来调用
成员方法不重名是,子类调用一个方法时,是谁的,就用谁的,没有往上找,如果是私有方法,实践证明,子类无法调用
成员方法重名,可以使用super this关键字进行区分,如果没有,离谁近就调用谁
父类拥有变量如果是私有变量,可以通过 本类中构造方法 本类中get set或者本类中其它方法来进行访问
本类中的私有变量,可以直接使用变量名 或this.变量名 或方法(getter 或其它)来进行使用

关于子类的构造方法
在子类的构造方法中,一定要先有父类的构造方法,如果没有,默认在第一行有父类默认构造方法
如果父类的成员变量都是私有变量,则第一行父类构造方法就显得尤为重要,因为子类无法访问父类成员变量,如果父类没有带参数的构造方法,而子类有带参构造,那么在该带参构造中只能调用父类setter方法## 标题
继承使代码简化,但并没有简化空间,因为每个子类创建时都会创建父类空间,而不是共用父类空间







 (1)public double getSalary()
    {

        double baseSalary=super.getSalary(); //此处一定要加supper,否则会成为死循环
        return baseSalary+bonus;

    }
    (2)子类访问父类的私有变量时只能使用父类的方法
     public double getSe(){
        double baseSalary=salary+bonus; //报错salary has private method
        return baseSalary+bonus;
        
        
    }
    (3)私有变量在本类中的三种访问方法
     private double bonus;
     直接访问  或this.bonus 或this.getbonus
(4)父类中的非私有变量可以直接访问
    public double gTest(){
        double baseSalary=test+bonus; //test是父类中的变量
        return baseSalary+bonus;


    }.继承的写法
1.

```java
class 父类 {
...
}
class 子类 extends 父类 {
...
}

2.访问成员变量
(1)直接通过子类访问成员变量,如果遭遇重名,等号左边是谁,就优先用谁的,如果没用,向上找
(2)通过方法间接访问成员重名变量,则该方法隶属于谁,访问谁的成员变量
(3)当 父 子 局部重名时
在这里插入图片描述
2.成员方法重名
是谁的,就用谁的,如果没有,就向上找

三.方法的重写(覆盖)
1.定义
在继承中,方法的名称一样,参数列表页一样
2.写法

3.注意事项
(1)子类方法的返回值范围必须小于等于父类方法的返回值范围(辈分) object最大
(2)子类方法的权限必须大于等于父类方法的权限
public>protected>(default)>private

四.supper与this


1.supper用法

> ![这里是引用](https://img-blog.csdnimg.cn/7536ba4d4d2e46ea8559e971366659a4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5byI5biI5Lqm5Y-L,size_20,color_FFFFFF,t_70,g_se,x_16)
2.

```java
/*
super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:

1. 在本类的成员方法中,访问本类的成员变量。
2. 在本类的成员方法中,访问本类的另一个成员方法。
3. 在本类的构造方法中,访问本类的另一个构造方法。
在第三种用法当中要注意:
A. this(...)调用也必须是构造方法的第一个语句,唯一一个。
B. super和this两种构造调用,不能同时使用。
 */
public class Zi extends Fu {

    int num = 20;

    public Zi() {
//        super(); // 这一行不再赠送
        this(123); // 本类的无参构造,调用本类的有参构造
//        this(1, 2); // 错误写法!
    }

    public Zi(int n) {
        this(1, 2);
    }

    public Zi(int n, int m) {
    }

    public void showNum() {
        int num = 10;
        System.out.println(num); // 局部变量
        System.out.println(this.num); // 本类中的成员变量
        System.out.println(super.num); // 父类中的成员变量
    }

    public void methodA() {
        System.out.println("AAA");
    }

    public void methodB() {
        this.methodA();//this可以不写,起强调作用
        System.out.println("BBB");
    }

}

3,内存图

这里是引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈师亦友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值