zoukankan      html  css  js  c++  java
  • JAVA中的继承

    第一节 JAVA中的继承

    1.继承的概念:它是类和类的一种关系,“is a”的关系,java中的继承是一种单继承,一个类只有一个父类,superclass 父类;
    2.继承的好处:子类拥有父类的所有属性和方法。private修饰的无效子类不能拥有,private的属性继承不了。java的继承可以实现代码复用;
    3.语法规则 class 子类 extends 父类{ },idea中快速建立子类的办法,在当前public class 这行 alt+enter 然后选择subclass。

    第二节 JAVA中的方法重写

    1、对父类的方法不满意时,子类可以重写这个方法,并且在子类调用时会优先调用子类的方法。
    2、语法规则:返回值类型、方法名、参数类型及个数都要与父类继承的方法相同,这才叫方法的重写。
    重写和重载的区别
    1.重写必须继承,重载不用。
    2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
    3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
    4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常。

    第三节 JAVA继承的初始化顺序

    1.初始化父类再初始化子类
    2.先执行初始化对象的属性,再执行构造方法中的初始化
    以这段代码为例,Animal 父类 Dog子类,Dog dog=new Dog();仅仅创建了子类对象,但其父类Animal子类Dog的构造方法都执行了,会先执行父类的构造方法,再创建子类的对象。父类对象——属性初始化——构造方法,然后子类对象——属性初始化——构造方法。当我们创建一个子类对象时,会先创建父类对象的初始化,再初始化父类的构造方法,然后是子类对象属性初始化和构造方法初始化。在这里我想强调的是:假如Test测试代码中只new了一个子类的对象,此时会先执行父类的对象初始化构造方法,再执行子类的构造方法。注意:
    1.如果父类是无参构造方法时,子类也是的话可以省略,先父类构造再子类;
    2.父类仅一个有参构造时,子类必然是有参构造方法,不能重载。因为重载子类new对象时无参数,父类无参数的话就无法构造;
    3.解决办法是父类再添加一个无参构造方法,此时子类可以没有有参方法,也可以在有参的方法后再写一个重载的无参构造法。会根据有参无参选择对应的构造方法。
    在子类继承父类的有参构造函数时,super(参数),是构造函数中{}第一条语句,super代表父类,()代表调用父类中的构造函数。super();//有时候这句无参的构造方法会被系统默认隐藏掉,实际上是存在的,只是不显示。super(参数);这是有参构造法

    第四节 JAVA中final的使用

    final 最终的,不可修改 可修饰
    final 类 该类不允许被继承
    final 方法 该方法不允许被覆盖或者重写
    final 属性 该类的属性不会进行隐式的初始化,类的初始化属性必须有值或在构造方法中赋值,但只能选其一
    final 变量 则该变量只能赋一次值,变为常量。

    第五节 JAVA中super的应用

    super关键字,可以代表父类对象,访问父类的属性 super.age;调用父类的方法 super.eat();
    注意:父类对象的属性和子类对象的属性并无关系,是两个属性。当一个类继承与另一个类,子类中没有父类的方法时,用子类的对象调用方法会优先在子类中查找该方法,再到父类中找。当一个方法只在父类中定义时,调用该方法会使用父类中的属性。如果该方法中又调用了其它方法,还是先子类找再父类找。
    super在构造方法中的应用
    1.子类构造中必须调用其父类的构造方法
    2.如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类的无参构造方法 super();隐式调用,如果显示调用方法,必须在子类构造方法中的第一行
    3.如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参构造方法,则编译出错。
    this和super用法总结:
    1.this是自身的一个对象,代表对象本身,可理解为指向对象的一个指针
    this的用法在java中大体可以分为三种:
    a.普通的直接引用,this相当于指向当前对象本身
    b.形参与成员名重名,用this来加以区分
    c.引用构造函数
    2.super可以理解为指向自己超(父)类对象的一个指针,而这个超累指的是离自己最近的一个父类
    super也有三种直接用法
    a.普通的直接引用,super相当于只想当前对象的父类,可以用super.XX来引用父类的成员
    b.子类的成员变量或方法与父类中的成员变量或方法名重名
    c.引用构造函数
    super(参数):参数也可能为空,应该为构造函数的第一条语句,调用父类的构造函数
    thiss(参数):在构造函数的第一条语句,调用本类中另一种形式的构造函数。

    第六节 Object类 I

    toString()方法
    当我们在程序中直接打印一个对象时,输出的是对象的哈希地址。如果想输出对象的属性,可以重写toString方法,在Object里定义的toString()方法,返回对象的哈希code码,(对象地址字符串),可以通过重写toString()方法表示出对象的属性,IDEA 中 alt+fn+insert 快捷方式打开toString方法的重写。

    第七节 Object类 II

    equals()方法,比较的是对象的引用是否指向同一个内存地址,Dog dog=new Dog();dog其实不是对象,它引用了内存的地址,是间接的引用了对象的地址,操作地址的时候间接的操作了对象的值,一般情况下比较对象的属性值是否一致,当父类的方法解决不了时,我们就要重写equals方法。== 如果比较的是两个引用的值时,比较的也是内存地址。

    乘风而归——只要抱着良好的愿望演奏,演员的演技可以不予苛求。
  • 相关阅读:
    Codeforces Round #548
    省选前的th题
    省选前多项式的挣扎
    2019.3.18考试&2019.3.19考试&2019.3.21考试
    省选前的反演抢救计划
    2019.3.16 noiac的原题模拟赛
    AtCoder Regular Contest 069 F
    Atcoder Grand 012 C
    Atcoder Grand 011 C
    Atcoder Grand 006 C-Rabbit Exercise
  • 原文地址:https://www.cnblogs.com/xuejiangbo/p/6687243.html
Copyright © 2011-2022 走看看