继承(java语法)

文章详细介绍了Java中的继承机制,包括继承的概念、语法(使用extends关键字)、父类成员的访问规则,以及super关键字在访问父类成员和构造方法中的应用。此外,还讨论了子类构造方法的执行顺序和this与super的区别,以及访问权限(public,protected,private和default)和final关键字的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承(java语法)

在这里插入图片描述

在我们敲代码的过程中会遇到大量代码重复、冗余等问题,由此我们想到能否将这些重复的代码进行抽取呢?

因此在面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。

1.继承的概念

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性
的基础上进行扩展增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了
由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

2.继承的语法

在Java中如果要表示类之间的继承关系,需要借助extends关键字, 具体如下:

修饰类 class 子类 extends 父类{
    ......}
  1. 子类会将父类中的成员变量或者成员方法继承到子类中了
  2. 子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了

3.父类成员访问

在继承体系中,子类将父类中的方法和字段继承下来了,那在子类中能否直接访问父类中继承下来的成员呢?

3.1.1 子类中访问父类的成员变量

在子类方法中 或者 通过子类对象访问成员时

  • 如果访问的成员变量子类中有,优先访问自己的成员变量。
  • 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
  • 如果访问的成员变量与父类中成员变量同名,则优先访问自己的 。

成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找

3.1.2 子类中访问父类的成员方法

  • 通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到

    则访问,否则编译报错。

  • 通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用

    方法适传递的参数选择合适的方法访问,如果没有则报错 。

问题:如果子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢? 请看下文。

4. super关键字

super关键字主要作用:在子类方法中访问父类的成员

  1. 只能在非静态方法中使用

  2. 在子类方法中,访问父类的成员变量和方法。

    public class 子类 extends 父类{
        super.a;    //访问父类成员变量
        super();    //访问父类成员方法
    }
    

5.子类构造方法

父子父子,先有父再有子,即:子类对象构造时,需要先调用父类的构造方法,然后再执行子类的构造方法。

class father{
    public father(){      //父类构造方法
        ...
    }
}
class son extends father{
    public son(){    //用户没有写时,编译器会自动添加,而且super()必须是子类构造方法中第一条语句.
        super();     //在子类完成构造之前,必须先完成父类的构造方法,因此才会用super()调用父类方法 
    }                //如果有参数,即传递参数。
}

将从父类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整 。

  1. 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构

造方法

  1. 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的

父类构造方法调用,否则编译失败。

  1. 在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句。
  2. super(…)只能在子类构造方法中出现一次,并且不能和this同时出现

6. super和this的区别

相同点

  1. 都是Java中的关键字

  2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段

  3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

不同点

  1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
  2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
  3. 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
  4. 构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有

7. protected 、public 、private 、default 关键字访问权限

default:代表没有关键词修饰的成员变量

NO范围privatedefaultprotectedpublic
1同一包中的同一类🉑🉑🉑🉑
2同一包中的不同类🉑🉑🉑
3不同包中的子类🉑🉑
4不同包中的非子类🉑

8. final关键字

final关键可以用来修饰变量、成员方法以及类。

  1. 修饰变量或字段,表示常量**(即不能修改)**

    final int a = 10;
    a = 20; // 编译出错
    
  2. 修饰类:表示此类不能被继承

    final public class Animal {
    ...
    }
    public class Bird extends Animal {
    ...
    } 
    // 编译出错
    Error:(3, 27) java: 无法从最终com.bit.Animal进行继
    
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄花菜.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值