第八天:继承

1.继承
  作用:利于代码的重用。
  引入: 多个类中,有相同的代码,不想写了,但是还想用,怎么办?
  实现步骤:
  A.把多个类中,相同的属性和行为提取出来,放到一个单独的类里,这个类就叫做父类。
  B.把特有的属性和行为 放在各自的类里,这些各自的类 叫子类
  c.在子类名的后面写 extends 父类名,就实现了继承。
    然后父类里的资源,子类对象就可以使用了。

2.方法重写:
   父类的方法体,已经不能满足子类的需求了,子类可以重写方法。

   方法重写:   VS        方法重载
    子类                  本类下
    方法名相同            方法名相同
    参数列表相同          参数列表不同
    返回值相同/缩小            返回值无关
    访问修饰符相同/扩大        访问修饰符无关

3.java里继承的方式有两种:

   隐式继承:A         ===》Object
   显式继承:A extends B   B extends C

4.继承的特性:

   A.传递性: A extends B   B extends C ; A可以用C的资源了
   B.单根性: 一个类只能继承于一个父类。

5.子类 不能继承父类的什么  === 构造方法!
6.继承关系下,权限修饰符的使用范围:
                  本类       同包类                         同包子类              非同包类         非同包子类
   public         V        对象名.资源V                 直接用/super.资源V     导包后 对象名.资源V  导包后 对象名.资源V

   protected      V   无论是否有继承关系,对象名.资源V     直接用/super.资源V     不能用!X          导包后 直接用/super.资源V

   默认的        V    无论是否有继承关系,对象名.资源V     直接用/super.资源V     不能用!X           不能用!X

   private      v       X                                    X                     X                   X

7. super       VS                    this
   父类对象                           子类对象
   可以调用属性/方法/构造器            可以调用属性/方法/构造器(要求是第一行)
   super.方法/属性 ==区分;搜索效率高
   super();---调用父类的无参构造
   super("张三",23);---调用父类的有参构造
   ===也要求是子类构造方法里的第一行

8.Object类:   所有类的根基类!

toString();  ===>实体类  最好都要重写toString();
   源码中: getClass().getName() + "@" + Integer.toHexString(hashCode());
           获得当前对象所属类的[全局限定名] +@ + 当前对象堆存储地址计算生成的哈希码 转成的16进制字符串。

   程序中, 对象名.toString(); 想把自己的属性 连接成字符串,输出展示给用户看。
   所以需要对Obejct类中的toString()进行重写!

   System.out.println(demo.toString());
   System.out.println(demo); //输出对象时,会自动调用toString()方法。

equals(); Object类中源码是比较地址;

  关系运算符:  基本数据类型  ==
               引用数据类型  ==

hashCode(); object类中源码是 把对象的内存地址 转成 整数;
    public boolean equals(Person person) {
        if(this.id.equals(person.getId())
                && this.age==person.getAge()
                && this.name.equals(person.getName())
                && this.sex.equals(person.getSex())){
            return true;
        }else{
            return false;
        }
    }

    public int hashCode(){
        return   this.id.hashCode() +this.sex.hashCode()
                +this.name.hashCode()+this.age;
    }


9.继承条件下 构造代码的执行顺序:
   A.先执行父类的构造方法(),在执行子类的构造方法
     ===父类构造方法,可以是子类通过super()指定的;
         也可以程序自动调用的父类无参构造;系统没法帮忙调用有参构造!

   B.在有静态变量,静态代码快,构造代码块,构造方法时候:
   静态资源(父类的静态变量>父类静态代码块 >子类的静态变量 >子类静态代码块)
   父类构造代码块 >父类的构造方法>子类的构造代码块>子类构造方法。

10.类和类之间的关联关系:
  继承  extends
  实现
  依赖关系: 参数
  关联关系: 属性 三层架构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值