面向对象——继承

本文介绍了面向对象编程中的继承概念,强调了如何通过Java的extends关键字实现继承,以及protected关键字在访问控制中的作用。讨论了super关键字的使用,子类构造方法与父类构造方法的关系,以及成员函数的覆盖(重写)规则。同时,详细阐述了静态成员的特点,包括它们在继承中的行为和限制。内容涵盖了继承中的访问权限、构造方法、函数覆盖和静态成员的关键知识点。
摘要由CSDN通过智能技术生成

继承

继承是面向对象编程中非常强大的一种机制,它首先可以复用代码。当我们让子类父类继承时,子类就获得了父类的所有功能,我们只需要为子类编写新增的功能。

Java使用extends关键字来实现继承

通过继承,子类只需要编写额外的功能,不再需要重复代码。

注意:子类自动获得了父类的所有字段,严禁定义与父类重名的字段!

在OOP的术语中,我们把Person称为超类(super class),父类(parent class),基类(base class),把Student称为子类(subclass),扩展类(extended class)。

Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类。除了Object,都会继承自某个类。

protected

继承有个特点,就是子类无法访问父类的private字段或者private方法。

例如,Student类就无法访问Person类的nameage字段这使得继承的作用被削弱了。为了让子类可以访问父类的字段,我们需要把private改为protected。用protected修饰的字段可以被子类访问

因此,protected关键字可以把字段和方法的访问权限控制在继承树内部,一个protected字段和方法可以被其子类,以及子类的子类所访问

super

super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName

在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();

class Student extends Person {
    protected int score;

    public Student(String name, int age, int score) {
        super(name, age); // 调用父类的构造方法Person(String, int)
        this.score = score;
    }
}

如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。

子父类中成员函数的特点

当子父类中出现成员函数一模一样的情况,会运行子类的函数。 这种现象,称为覆盖操作。这时函数在子父类中的特性。

  • 函数两个特性:

    1,重载。同一个类中。overload

    2,覆盖。子类中。覆盖也称为重写,覆写。

  • override 覆盖注意事项:

    1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。

    2,静态只能覆盖静态,或被静态覆盖。

当对一个类进行子类的扩展时,子类需要保留父类的功能声明, 但是要定义子类中该功能的特有内容时,就使用覆盖操作完成.

子父类中静态成员的特点

static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化;

static数据成员只能在类的外部进行初始化

(1) static 成员函数没有 this 形参,它可以访问所属类的 static 成员,但不能访问非 static 成员。

(2)static成员函数既可以在类的内部定义,也可以在类的外部定义,在外部定义时,不能重复指定static保留字。

(3)static成员函数不能声明为虚函数,不能实现动态绑定

(4)static 成员函数不能声明为const,因为const是针对this是不是const而言的

(5)构造函数、析构函数不能为静态函数。

公有继承的私有成员不能被继承,无法访问

公有继承的保护成员,只能在派生类中访问,不能用派生类对象访问

私有继承的公有成员,成员被私有化,无法访问

静态函数不存在重载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0_59138290

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

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

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

打赏作者

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

抵扣说明:

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

余额充值