欸嘿,第一次分享学习笔记,希望同学们不懂的能看懂!
在此感谢高淇老师和蔚老师的指导o(* ̄▽ ̄*)ブ~
很棒。
老师,想问下,这里已经变成了Animal类型了,既然还可以调用前面的Dog的shout方法却不可以调seeDoor方法,难道Dog类的shout方法和seeDoor类型不一样吗?
这里a的类型时Animal,这个类中只有shout方法。
为啥这里狗可以转型而猫不能转型呢?不都是animal的子类吗?而且都是拿animal的对象转的
老师,这个转型了之后下面的方法还是不能用Dog 自己的方法,但是上面可以用,这是为什么
上面转型了,可以使用转型后的对象来调用方法。你现在写在方法内部,用的是参数a,他并没有转型,所有不能调用的
老师这个转型应该怎么理解,对象还有类型区分吗
现在学习的是多态的技术,也就是父类引用类型指向了子类引用对象,多态的前提是建立在继承上的,在子类继承了父类时,可以重写父类的方法来实现子类特定的方法实现,这时候呢,运行的流程是,编译看父类,执行看子类。
至于,父类 与 子类之间的转换呢,因为父类类型的引用 不能调用子类 独有的方法,所以需要调用子类的独有方法时,需要向下转型成子类对象
类型呢是一个类(也叫模板) 对象呢是一个类的实例化,是具体干活的
谢谢老师! 老师太牛了每次只需要几句话就解释得清清楚楚的,还变相加深了我对 对象的的了解,太感谢了!
你也很棒,仔细的读了和理解了老师的每一句话,很棒
老师,看下我这个怎么转型不了呢,哪里的错呢?
你怎么能把一个Animal1的类转成Dog1类型
你可以把Animal1换成a1试试
像这种把b再次强制转型为什么会报错呢
animal转换成dog是因为animal是dog的父类,直接可以转换,而dog和cat直接是没有关系的,他们都是animal的子类,一个狗转换成猫是不行的。
老师你好,请问为什么狗和猫都是同级的对象,也就是都是animal的子类,为什么可以向下强制转型为dog,但是却不能向下强制转型为cat呢?
微信已回复
老师 a instanceof Dog ,如果为真,a就是Dog类型,执行的语句为什么还要进行转换,Cat也一样
对,向下类型转换就得强转。而向上类型转换是自动的,不用这么写。
老师,我想问下 为什么要有向下转型 ,子类创建对象然后调用特有的方法不是也可以吗
是不是因为最新的JDK,这种强转,编译器能识别到了
应该是 a
StringBuffer str = (StringBuffer) obj;
老师,例子里的这句话,有什么不对吗?这个向下强制转换是什么地方出错的呢?
String和StringBuffer之间不可以强制转换。如果你要转为StringBuffer,你可以通过new StringBuffer对象,通过构造方法去转换。
程序真正跑起来是什么类型,就调用什么类型的方法。怎么理解这句话?
意思是这样吗:我有一个父类的引用指向子类的变量,这个引用实际上是child类型,是只可以用child类型的方法么?还是只能用父类型的方法和属性。
new前面这个是你new的对象的类型,使用多态,程序是不知道你是什么类型的,只有当idea run了只有,系统才知道你这个对象是什么类型的,调用的时候只能调用new前面这个类型的方法。
我有一个父类的引用指向子类的变量,这个引用实际上是child类型,是只可以用child类型的方法么?还是只能用父类型的方法和属性。
对,引用指向子类,只能调用父类的方法和属性,调用子类重写的方法,输出的是子类的方法。
向上转型时 子类会遗失除与父类对象共有的其他方法;可以用向下转型在重新转回,但是如果是同名属性呢,为什么我在idea里面测试的时候,父类引用指向子类的对象后,会丢失原本的属性,向下转型后也没有办法恢复。比如,父类age 40 子类 age 10,结果向上转型也好乡下也好,都是40
有关于接口。
接口里面是只有抽象的方法一定要去实现吧,而默认方法重写不重写无所谓的吧?
代码能给我发一下吗
接口里的抽象方法只有被别的类实现了,就需要被重写。默认方法可以重写,也可以不重写。
既然类型会转换错误,请问怎么才能同时输出狗看门和猫抓老鼠的动作呢?
输出这些东西,和类型转化没有关系
老师,能帮忙画一下红框部分的内存分析图吗?