【Java】Java中的super与this关键字,以及继承中方法重载与方法重写的知识点

本文详细介绍了Java中的继承概念,包括父类与子类的关系,以及多态的重要性。重点讨论了`super`和`this`两个关键字的使用,解析了它们在调用构造方法和访问成员变量时的不同作用。文章通过实例解释了`super`在调用父类构造方法和方法时的规则,以及`this`在构造方法中的应用。此外,还探讨了方法重载和重写的区别,帮助读者更好地理解和掌握面向对象编程中的核心概念。
摘要由CSDN通过智能技术生成

目录

0、本文的细节小知识点

0.0 、专有名词

0.1、修饰符

0.2、super 和 this 关键字

0.2.1 super 关键字

0.2.2、 this关键字

 1、继承

1.1、何为继承?!

1.2、Java有多态继承吗?

2、方法重载和方法重写


0、本文的细节小知识点

0.0 、专有名词

父类(基类)(超类)        :     parent class  、  base class  、 superclass

子类(派生类)(次类)(扩展类)                   :       

 child class       、derived  、        subclass   、     extended class

继承&多态                           :        Inheritance        Polymorphism

重写&重载                           :        Override            Overloading

动态绑定                             :        Dynamic binding(理解动态绑定)

0.1、修饰符

0.2、super 和 this 关键字

0.2.1 super 关键字

super关键字 ! 指代父类 可以用于调用父类中的普通方法和构造方法!

即 super关键字 可以用于两种途径:

(1):调用父类的构造方法。

父类的构造方法不会被子类继承,

例如当在父类中 只有有参构造方法时,那么父类中的系统自己补充的无参构造方法就被覆盖了!

而且需要明白super关键字的第(1)种用法,还需要知道,在JAVA中,当子类实例化new对象的时候,先调用父类的构造方法,再调用自己的构造方法!


public class TestDemo
{
    public static void main(String[] args)
    {

//        System.out.println("HelloWorld");
        SonChildErzi son = new SonChildErzi();

    }

}


class  DieFatherBa
{
    public DieFatherBa()
    {
        System.out.println("我恁爹,先有爹再有子,姜还是老的辣!");
    }
}

class SonChildErzi  extends DieFatherBa
{
    public SonChildErzi()
    {
        System.out.println("nbnb666,先有父后有子,上梁不正下梁歪");
    }
}

输出结果如下图所示:

 这时候你在爹的构造函数里传了参,把他变成有参构造了,那问题就来了

子类构造方法先构造父类再构造子类的时候,他原来父类好端端的(系统自己补的)无参构造方法,父类无参时,子类在构造父类的时候也自己悄悄补了个super(),但是现在,父类变成有参构造方法了,被显式调用了,那么子类也必须显式调用父类的构造方法!

 要调用 父类 构造方法 ,没有系统给你默默补上 super(),

你就需要了解到 ,要调用父类的构造方法就必须使用关键字super,而且这个调用必须是构造方法的第一条语句。

 这时候就不会再报错了!

 所以 设计指南上说了:一般情况下,最好能为每个类提供一个无参构造方法,以便于对该类进行扩展,同时避免错误!

(2):调用父类的方法!关键字super不仅可以调用父类的构造方法,也可以引用父类的方法!

结果如下:

0.2.2、 this关键字

 (1)this.属性名称

(2)this.方法名称 这两点均在以前的博客中有讲解

(3)因为super的第一个作用与父类构造方法有关且花了大篇幅叙述讲解,因此在此

着重讲一下第三个作用 this()加以区分!

this()  访问本类中的构造方法,()中可以有参数的,如果有参数的,就是调用的指定的有参构造!

注意事项:

1、this() 不能使用在普通方法中! 只能写在构造方法中!

2、必须是构造方法中的第一条语句!

this()这个可不能单独写在类中嗷,跟super(参数)一样要写在构造方法中哦,不然分分钟报错给你啊!~

这时候我们换到无参的构造方法中:

 !!!!this()要被写在 构造方法中!!!还要this括号内传的参数和放进去的构造方法的参数不同!!!

即:this内有N个构造方法,你可以根据参数列不同,对N-1(除去跟自己所在的构造函数相同的参数列)个构造方法进行互相调用!

如图:

 1、继承

1.1、何为继承?!

面向对象的编程允许你从 已经定义的类中 定义 新的类 这称为 继承!

继承是Java在软件重用方面一个重要且功能强大的特称。

(假设要定义一个类,例如图书馆模型中,分为图书管理员和普通用户,对其进行抽象建模,面向对象对图书的属性 和 User 对 图书的操作 建模,User中的(Admin和NoramalUser)有很多共同的特性。如何设计?

User类来避免冗余并且易于维护(更改一个父类,其他中的子类也更改)的最好方式?

答案自然是使用继承!

继承使得你可以定义一个通用的类(即父类),之后扩充该类为一个或多个更加特定的类(即子类)

子类会自动拥有和继承父类所有可以继承的属性和方法!

和传统的理解不同,子类并不是父类的一个子集。实际上,一个子类通常比他的父类包含更多的信息和方法!此外,继承还是一种“是一种”关系(is-a)关系来建模的 

如上文提到的 Admin是User  NormalUser 也是 User

除构造方法外的所有方法和属性,

对于父类中有private的:私有数据域,在该类外是不可访问的,因此,不能在子类中直接使用。

但是,如果父类中定义了针对这些私有数据域的访问器/修改器,那么就可以通过这些公共的访问器/修改器来访问和修改他们!

面向对象方法结合了面向过程范式的强大之处,并且进一步将数据和操作集成在对象中!

1.2、Java有多态继承吗?

其实,Java只是选择了“单继承”,且提出解决丰富度的方案:

 

String str1 = new String("小红日srs");
int [] array = new int[ ] ;
HashSet<Integer> set1 = new HashSet<>();

User user = new User();

一旦出现new,就在堆上开辟内存用来存储对象了!

Java中的继承是来自于一个父类,这种限制称为单一继承(single inheritance),如果使用extends关键字来定义一个子类,他只允许有一个父类。

2、方法重载和方法重写

方法重载:Overload

1:要求必须在同一个类中。

2:对于签名中的返回值类型不做要求,与修饰符无关。

3:对于参数列表中的参数个数或参数类型或参数顺序不做要求。

4:要求必须同名。

方法重写:Override 又叫覆写

1、方法重写必须是子类重写父类中的方法

2、重写的方法与父类中的方法返回类型和方法名称,参数列表必须相同

满足上述条件这样我们说子类与父类的方法构成了重写关系。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傻根根呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值