emmm我试图用大白话描述一下继承

java的继承是一个overriding+hiding的机制,前者适用于 instance method, 后者则是 class method 与 field.
那么在外部试图访问父类的信息时,被hidden的尚可通过 Son.super.method() 或 ((Parent) son).field 重见天日;但被overridden后,没有些奇技淫巧是没法从son里调用parent.method()的

那么回到具体问题上,seeM() 在 Dog 中重新声明,那么 dog 与 animal 均“只能”访问子类方法,则双方同时有
this->seeM()存在
=> return this->m
=> sout 6
(抱歉点号的话会被转成“网页链接”)

而 getM() 仅在 Animal 中声明,则有
this->getM()不存在
=> 查找 super->getM()
=> return super->m
=> sout 100

至于animal.m的100则属于之前提到的通过类型转换对 hidden fields 的访问,不再赘述
最后是一点碎碎念,不要这样声明变量,tutorials说的很明确了,Generally speaking, we don't recommend hiding fields as it makes code difficult to read.
非大白话资料 java tutorials 在这
网页链接 Hidden Fields
java language specification 在这
网页链接 method inheritence 在8.4.8 field declaration 在8.3 dynamic lookup 在 15.12.4
附加题 分别声明 static bark(), animal 与 dog 分别会怎么叫?

