day08-java继承

day08-继承

一、继承

  • 概念:
    • 通俗来讲:父亲跟儿子的关系。父亲具有一些跟儿子相同的属性和行为,但是儿子同时也具备一些自己独有的属性和行为。

    • 专业讲:有一个父类,具有一些公共的属性和方法,比如Person类,有name,age,sex等属性,eat(), sleep()等行为,又有一个Student类,他也具有Person类的相同属性和方法,那么Student类就可以继承Person类,而不用再去定义那些相同的name,age等等属性和方法;同时student类又可以拥有自己的特有属性和方法,比如有成绩grade属性,学习study()方法等,这些是父类Person不具备的,所以此时子类Student 他就具备Person中的内容+自己特有内容。

    • 子类继承父类的都是非private内容,父类中private修饰的是继承不了的

  • 内存分析

  • Person p = new Person(); 
    Student s = new Student(); ​ 
    s = p;//此时会编译报错,但是加上 s =(Student)p,强转后,编译无措,但是运行时候,子类调用自己的方法时候就会报java.lang.ClassCastException,
    因为此时子类要访问自己的内容时候,你父类中根本没有,就报错,看下图,子类的范围会大于父类。

     

    • 在创建一个单纯的父类对象时候,内存中就开辟一块空间给父类的Person

    • 但在创建一个子类的对象的时候,在内存中也同样开辟一块空间给Student,但是这块空间中,先会给一部分给父类的Person,然后才是自己的Student。

    • 当把父类的引用传递给子类时候,就会报错,原因子类访问不到自己特有内容了,此时父类的引用指向中只有父类自己的共性内容.

  • 覆盖
    • 当父类中有声明一些共有的方法时候,Person中比如eat( )  sleep( )等方法,但是这些都是固定的,每个子类都可以有自己不同的eat( )和sleep( )表现形式,这个时候就可以在子类中覆盖父类的同名方法,调用时候优先考虑子类中的方法。

    • 当出现继承时候,子类创建实例时候,比如 Student s = new Student();此时是先创建一个父类的Person对象,将Person加载完毕后,才会来创建子类的Student对象,这样就很好解释,为什么父类调用同名方法时候,会是子类覆盖后的,因为先加载完父类后,在加载子类,此时子类已经将此方法重写了,你再使用的肯定是覆盖后的方法。

      下面的结果就是zi show  0    和 zi  show  8

     

 

转载于:https://www.cnblogs.com/zhiai007/p/9357148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值