• 子类继承父类的哪些成员


    先写父类还是先写子类:
    一般我们在开发中先编写多个自定义类,写完之后发现多个类之间存在相同的代码,此时可以抽取一个父类。
    我们以后做开发,都是基于框架/组件来做的,我们是在别人的基础之上继续开发。

    好比别人提供清水房,我们只需要在清水房的基础之上装修,就可以使用。

    以后,我们定义新的类回去继承与框架中/组件中提供的父类。

    --------------------------------------------

    子类继承父类之后,可以拥有父类的某些状态和行为,(子类复用了父类的功能或状态)。
    子类继承父类的哪些成员(根据访问修饰符来判断):

    1:如果父类中的成员使用public修饰,子类无条件继承。
    2:如果父类中的成员使用protected修饰,子类也继承,即使父类和子类不在同一个包中。
    3:如果父类和子类在同一个包中,此时子类可以继承父类中 缺省修饰符的成员。
    4:如果父类中的成员使用private修饰,子类打死也都继承不到。private只能在本类中访问。
    5:父类的构造器,子类也不能继承,因为构造器必须和当前的类名相同。

    -----------------------------------------------------------------------------------

    方法重载和方法覆盖(方法)的区别:
    方法重载:Overload
    方法重写:Override

    批判,本身二者一点关系都没有,仅仅只是因为名字很像。

    --------------------------------------------

    方法重载:Overload
    作用:解决了一个类中,相同功能的方法不同的问题。
    既然是相同的功能,那么方法的名字就应该相同。
    规则:两同一不同
    同类中,方法名相同,可能参数列表不同(参数类型、参数个数、参数循序)。
    方法重写:Override
    作用:解决子类继承父类之后,可能父类的某一个方法不满足子类的集体特征,此时需要重新在新类中定义
    该方法,并重新写方法体;
    规则:一同两小,一大;
    一同:父类和子类的方法签名是相同的,所以。建议:直接拷贝父类中方法的定义到子类中,在重写的方法体,就OK了;

    --------------------------------------------------------------------

    Super关键字

    需求,在类中的某一个方法中,去调用父类呗覆盖的方法;

    此时的解决方法:使用super关键字:

    this: 当前对象,谁调用this所在的方法,this就是哪一个对象。
    super: 当前对象的父类对象。


    ------------------------------------------------------------------------


    子类初始化过程:创建子类对象的过程:

    在创建子类对象之前,会先创建父类对象,
    调用子类构造器之前,在子类构造器中,会先调用父类的构造器,
    默认调用的是父类无参数构造器....

    1:如果父类不存在可以被子类访问的构造器,则不能存在于子类;
    2:如果父类没有提供无参数构造器,子类必须显示通过super语句去调用父类带参数的构造器。
    (必须先有父类对象,而后才有子类对象)
    (必须先调用父类构造器,而后再调用子类构造器)

    例子:

    //父类
    class Animal{
      private String name;//私有 名字
      private int age;//私有的字段名 年龄
      Animal(String name,int age){
      System.out.println("Animal构造器");
      this.name = name;
      this.age = age;
    }

    public String getName(){
      return name + "," + age;
      }
    }
    //子类
    class Fish extends Animal{
      private String color;

      Fish(String name,int age,String color){
        super(name,age);
        this.color = color;
      }

      public void say(){
        System.out.println(getName() + "," + this.color);
      }

    }


    //子类初始化过程:创建子类对象的过程
    public class EditPlus{
      public static void main(String[] args){
        Fish f = new Fish("Animal",5,"橙黄色");
        f.say();
      }
    }

  • 相关阅读:
    深度排序与alpha混合 【转】
    SVN服务器配置说明 【转】
    3D空间中射线与轴向包围盒AABB的交叉检测算法 【转】
    Linux系统管理员不可不知的命令:sudo
    Linux 系统实时监控的瑞士军刀 —— Glances
    shell定期转移日志文件到云盘并定期删除云盘文件
    zabbix监控第二块网卡是否连通
    Gitlab自动触发Jenkins构建打包
    shell脚本检测网络是否畅通
    Prometheus入门
  • 原文地址:https://www.cnblogs.com/patriot/p/6855750.html
Copyright © 2020-2023  润新知