gta5单机买房子网站在建设,免费建小程序网站,centos7 wordpress无权限,网站资讯板块的搭建p303-326
重写override
和重载做个对比 注#xff1a;但子类可以扩大范围#xff0c;比如父类是protected#xff0c;子类可以是public
多态
方法或对象具有多种形态#xff0c;是面向对象的第三大特征#xff0c;多态是建立在封装和继承基础之上的。
多态的具体体现…p303-326
重写override
和重载做个对比 注但子类可以扩大范围比如父类是protected子类可以是public
多态
方法或对象具有多种形态是面向对象的第三大特征多态是建立在封装和继承基础之上的。
多态的具体体现
1.方法重载体现多态 通过不同的参数个数去调用sum方法就会调用不同的方法因此对sum方法来说就是多种状态的体现。
2.方法重写体现多态
3.对象的多态核心 1一个对象的编译类型和运行类型可以不一致 2编译类型在定义对象时就确定了不能改 3运行类型是可以变的 4编译类型看定义时 号的左边运行类型看 号右边。
例Animal a1 new Dog();//a1的编译类型是Animal运行类型是Dog
a1 new Cat//a1的运行类型变成了Cat,编译类型仍然是Animal
向上转型
多态一定是建立在封装和继承之上的向上转型父类的引用指向了子类对象如
Animal a1 new Dog()就是向上转型
可以调用父类的所有成员考虑访问权限
不能调用子类特有成员最终运行效果看子类的具体实现也就是说只能调用子类重写的方法
向下转型
Dog d1 Doga1;
1.只能强转父类的引用不能强转父类的对象
2.要求父类的引用必须指向的是当前目标类型比如猫不能转成狗但是动物指向狗的可以转成狗
3.向下转型后可以调用子类类型中所有成员。
我可以理解为向下转型的前提是向上转型吗
注意属性没有重写一说
属性的值看编译类型方法看运行
instanceof比较操作符用于判断对象的运行类型
动态绑定机制阴间
1.当调用对象方法的时候该方法会和该对象的内存地址/运行类型绑定
2.当调用对象属性时没有动态绑定机制哪里声明哪里使用
0314_韩顺平Java_动态绑定机制_哔哩哔哩_bilibili
多态数组
数组的定义类型为父类类型里面保存的实际元素类型为子类类型
练习创建一个Person对象2个Student对象和2个Teacher对象统一放在数组中并调用say方法。 升级后
弄了个新的引用指向people【1】。这里有个teacher类
向下转型的快捷写法
Studentpeople[i].study;
多态参数
方法定义的形参类型为父类类型实参类型允许为子类类型。 0317_韩顺平Java_多态参数_哔哩哔哩_bilibili 一些Object类的方法 和equals
1既可以判断基本类型又可以判断引用类型
2基本类型判断“值”。
3引用类型判断“地址”即判断它们是不是同一个对象。
4equals是Object类的方法只能用来判断引用类型
子类重写equals
例String的equals的源码 如果传进来的对象就是当前对象返回t。
如果传进来的是字符串及其子类那么向下转型为什么不是向上接下来判断长度并逐个字符比较。
如果比较的不是字符串则直接返回f。
那么最原始的equals呢↓ 所以Object的equals方法默认就是比较对象的地址是否相同即是不是同一个对象。
这里String中的equals把Object的equals重写了。
例2 第一个是判断地址是否相同返回false因为这里有两个对象
第二个equals已经被int类重写了int类的equals源码是
即比较它们的值因此返回true
自己重写equals public class Person{ private int age private String name private char gender public boolean equalsObject obj{ if(this obj){ return true;} if(obj instanceof Person){ Person p Personobj return this.name.equals(p.name)this.age p.agethis.genderp.gender; }return false; } } 课堂练习 F T F T F F T这里65和65.0的值是一样的
T
T
F
T
没见过不知道Date是一个类型“hello”是字符串直接编译器报错
hashCode方法
返回对象的哈希码值为了提高哈希表的性能。哈希表是啥捏听说后面会讲
老韩的6个结论
1.提高具有哈希结构的容器的效率
2.两个引用如果指向的是同一个对象则哈希值肯定是一样的
3.两个引用如果指向的是不同对象 当然哈希值也不一样
4.哈希值主要根据地址号来的不能完全将哈希值等价于地址
5.后面再集合中hashCode如果需要的话也会重写
toString方法
源码 就是把对象的hashCode值转换为16进制的字符串~
经常会重写toString方法输出对象的属性甚至有模板。
当输出一个对象时toString方法会被默认调用