• java面向对象(六)



    提示:以下是本篇文章正文内容,下面案例可供参考

    一、super关键字的使用

    1.概念

    1.super理解为:父类的
    2.super可以用来调用:属性、方法、构造器

    2.使用

    1.我们可以在子类的方法或构造器中。通过使用“super.属性"或“super.方法”的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略“super."
    2.特殊情况,当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性”的方式,表明调用的是父类中声明的属性。
    3.特殊情况,当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用”super.方法”的方式,表明调用的是父类中被重写的方法。

    3.super调用构造器

    1. 我们可以在子类的构造器中显式的使用“super(形参列表”的方式,调用父类中声明的指定的构造器
    2. “super(形参列表)"的使用,必须声明在子类构造器的首行!
    3. 我们在类的构造器中,针对于"this(形参列表)“或”super(形参列表)"只能二选一,不能同时出现
    4. 在构造器的首行,没有显式的声明”this(形参列表“或”super(形参列表 )",则默认调用的是父类中空参的构造器
    5. 在类的多个构造器中,至少有一个类的构造器中使用了“super(形参列表)",调用父类中的构造器

    二、子类对象实例化的全过程

    1.从结果上看:(继承性)

    1.子类继承父类以后,就获取了父类中声明的属性或方法。
    2.创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。

    2.从过程上来看:

    当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器.直到调用了java.lang.object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用。

    明确,虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。

    三、面向对象特征之三:多态性

    1.虚拟方法调用

    正常情况下:

    Person e = new Person();
    e.getInfo();
    Studengt e = new Student();
    e.getInfo();
    
    • 1
    • 2
    • 3
    • 4

    虚拟方法调用
    子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。

    Person e = new Student();
    e.getinfo();//调用的是Student类中的getInfo()方法
    
    • 1
    • 2

    四、方法的重载与重写

    1.如图所示:

    在这里插入图片描述
    重载:编译时确定
    重写:运行时确定(多态)

    2.多态性

    1.对象的多态性:父类的引用指向了类的对象
    2.多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 - --虚拟方法调用
    在这里插入图片描述

    3.强制类型转换(向下转型)

    在这里插入图片描述

    4.instanceof关键字的使用

    a instanceof A:判断对象a是否是类A的实例。如果是,返回true: 如果不是,返回false。

    1.使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型
    2.如果a instanceof A返回true,则a instanceof B也返回true.
    其中,类B是类A的父类。

    五、java.lang.Object类

    1.0bject类是所有Java类的根父类。
    2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.object类。
    3.Object类中的功能(属性、方法)就具有通用性。
    属性:无
    方法:equals()/toString()/getClass()/hashCode()/clone()/finalize()/wait()、notify()、notifyAll()
    4.Object类只声明了一个空参的构造器。

    六、变量(static修饰)

    在这里插入图片描述

    七、static关键字的使用

    1.概念

    1.static :静态的
    2.static可以用来修饰:属性、方法、代码块、内部类。

    2.使用static修饰属性:静态变量(或类变量)

    2.1 属性
    1.按是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量)
    2.实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
    3.静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
    2.2 static修饰属性的其他说明
    1.静态变量随着类的加载而加戟。可以通过"类。静态变量”的方式进行调用
    2.静态变量的加载要早于对象的创建。
    3.由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
    2.3 静态属性举例:System.out; Math.PI;


  • 相关阅读:
    愚人节礼物(C++)
    PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation
    弘辽科技:淘宝14天降权会恢复吗?多久能恢复正常?
    基于Java毕业设计学校图书资源交易平台源码+系统+mysql+lw文档+部署软件
    vim统计字符串出现次数
    NUC980 添加XT25BF256BWSIG spi-nor flash
    基于html+css+javascript+jquery+bootstarp响应式网页设计——大理我的家乡旅游景点
    Redis真没那么难,这份大佬实战笔记也太可了,吹爆
    Java学习笔记 --- 注解
    【学习挑战赛】经典算法之折半查找
  • 原文地址:https://blog.csdn.net/lalalalalab/article/details/133018393