JAVA特性之——多态
1、多态
1.多态性的表现:
(1)方法的重载与重写
(2)子类对象的多态性
2.使用的前提:
(1)要有继承关系
(2)要有方法的重写
3.格式:
Person p = new Man();
//虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
p.eat();
p.walk();
//p.entertain();//不能直接调用Man类中的方法
4.注意:
(1)编译时,认为p是Person类型的,故只能执行Person里才有的结构,即Man里特有的结构不能够调用
(2)子类对象的多态性,并不适用于属性
5.关于向下转型:
(1)向下转型,使用强转符:()
(2)为了保证不报ClassCastException,最好在向下转型前,用instanceof进行判断,若变量a是A类的实例,那么a也一定是A类的父类的实例
2、Object类
1.java.lang.Object类,是所有类的根父类
2.Object类仅有一个空参的构造器
3.关于方法
(1)equals(Objectobj)
1)源码
public boolean equals(Object obj) {
return(this == obj);//比较的是地址值
}
2)==
1>基本数据类型:根据基本数据类型的值判断是否相等,相等返回true,反之返回false
注:两端数据类型可以不同,在不同的情况下,也可以返回true
2>引用数据类型:比较引用类型变量的地址值是否相等
3)equals():
1>只能处理引用类型的变量,在Object类中发现equals()仍然比较的两个引用变量的地址值是否相等
2>像String、包装类、File类、Date类重写了Object类的equals()方法,比较两个对象的实体内容是否完全相同
3>若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写Object类的equals(Object obj)方法
(2)toString()方法——当我们输出一个对象的引用时,就会调用toString()方法
1)源码:
public String toString() {
returngetClass().getName() + "@" + Integer.toHexString(hashCode());
}
当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置(地址)
2)一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回
3)像String、Date、File、包装类都重写了toString()方法
3、包装类
1.基本数据类型由于不是类,不能够使用Java类库里提供的大量的方法,所以在设计上,我们让每一个基本数据类型都对应一个类,同时数据存储的范围还不变,此时相当于基本数据类型就具有了类的特点。这些类即为包装类(Wrapper或封装类)
基本数据类型: boolean bate short int long char float double
包装类 : Boolean Byte Short integer Long Character Float Double