随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

 

 

 

父子对象之间的转换分为了向上转型向下转型,它们区别如下:

  • 向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
  • 向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换

模板:A a = new A();

首先确定a属于A类型,在new给A()分配内存时,需要先确认A()中的A属于一般类还是继承类,A()中的A属于一般类,那么会将A类中的变量和方法放入A()分配的本类内存中。

模板:A a = new B();

首先确定a属于A类型,在new给B()分配内存时,需要先确定B()中的B属于一般类还是继承类,B()中的B继承A,那么会将分配给B()的内存分为两块,一块是(super)父类空间,存放父类A的变量和方法,另一块是(this)本类空间,存放本类B的变量和方法

因为a属于A类型,所以能用A类(父类)中的变量和方法,无法使用B类(子类)中的变量和独有的方法,但是如果A类(父类)中的方法被B类(子类)重写了,那么a调用的方法将会是B类(子类)的方法,即a使用的是A类(父类)中的变量和A∩B=B(A与B共有,但是使用的是B)中的方法

成员方法:编译看左,左边有方法,运行看右,运行重写后的方法

  B是A的子类,凡是A与B相同的成员方法都会被B重写。编译时(或写代码时)调用的是A类(父类),运行时(或使用代码)真正调用的是B类(子类)

成员变量:编译看左,运行看左

  而对于成员变量来说,B类(子类)不会重写A类(父类)的成员变量,所以编译时(或写代码时)调用的是A类(父类),运行时(或使用代码)调用的也是A类(父类)

 

作者本人所有随笔仅为学习笔记,仅供参考

 

 

posted on 2021-12-07 17:44  时间完全不够用啊  阅读(254)  评论(0编辑  收藏  举报