一:Object(万类之祖)
toString()的用法: 不用: System.out.println(对象);------------------------打出类的完全限定名+十六进制地址;
用: System.out.println(对象);------------------------打出Override的方法
equals()的用法: == 比较类的地址
对象equals(对象)比较类的属性
二:多态(对同一个指令(调用同一个方法(引用类型同对象不同))不同对象给予不同反应(不同对象的方法的实现))
父类引用存储了子类地址
父类引用指向子类对象
多态实现的前提
1:必须用继承关系
2:子类方法Override父类方法(调用同一个方法不同子类实现不同 )
3父类引用指向子类对象(多态本质)new对象的时候前面写父类就是表示地址用父类去引用
多态的实现:
使用父类作为方法形式参数的多态
使用父类作为定义方法返回值的多态(?)
******方法返回值类似了继承了已经就存在多态
instanceof(判断对象本身是哪个类)
pet instanceof Dog(pet对象是不是Dog)
PS:成员变量:优先用父类,没有向上找
*******************编译看左边,运行看左边
成员方法:new的谁就先用谁,在先上找
***************编译看左边,运行看右边 Fu obj=new Zi;
obj.methodzi();//编译会报错 左边父类methodzi()这个方法;
*************所以多态的实现,对象调用的方法必须是父类和子类都有的,编译看父类有没有这个方法,运行却运行子类的
一般我们定义父类同名的方法变为abstract在子类中实现(其实运行方法和继承差不多也是优先运行子类的)
三:向上向下类的转型(引用对象地址的改变)
向上:Pet dog=new Dog();————————————自动装换
向下:Dog dog=(Dog)