多态:在同一个时刻体现不同的状态,多态主要体现在向不同的对象发送同一个信息,不同的对象在接受到信息后产生不同的行为(方法),对象可以用自己的方法去响应共同的信息。
多态性的表现:1.方法的重载与重写 2.子类对象的多态性
使用的前提:1.要有继承关系。2.要有方法的重写
格式:Person p=new Man();//向上转型
//虚拟方法调用:父类的引用 指向子类的实例对象,当调用方法时,实际上是子类重写父类的方法
编译时:认为p是Person类型的,所以只能通过p访问Person拥有的属性和行为,Man特有的属性和行为不能访问。
反正一句话,访问变量看声明,访问方法看实际对象类型(new出来的类型)
例子:
关于向下转型
1.向下转型,使用强转符:()
2.为了不报ClassCastException ,最好在向下转型前进行判断:instanceof
if(p instanceof Woman){
Woman w=(Woman)p;
p.shopping();
}
java.lang.Object 是所有类的根父类
1.Object类仅有一个空参的构造器 public Object(){}
2.关于方法
equals(Object obj)
public boolean equals(Objec obj){
return (this == obj);
}
1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,不同返回false
两端的数据类型可以不同,只要值相同都返回true
2.引用数据类型:比较引用变量的地址是否值是否相等
equals():
>①只能处理引用类型变量②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等
>像String 包装类 File类 Date类这些重写Object类的equals()方法,比较是两个对象的"实体内容"是否完全相同。
>若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写Object类的
equals(Object obj)方法
toString()方法
当我们输出一个对象的引用时,会调用toString()方法。
1.public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置
2.一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回。
3.像String类、Date、File类、包装类都重写了toString()方法。
包装类
基本数据类型由于不是类,不能够使用java类库中提供的大量方法,所以在设计上,我们让每一个基本数据类型都对应一个类,同时数据存储的范围还不变,此时相当于基本数据类型有了类的特点,这些类即为包装类(wrapper 或 封装类);
基本数据类型 包装类
boolean Boolean
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
1.基本数据类型与对应的包装类有自动装箱、自动拆箱
如:int i = 10;
Integer i1 = i;//自动装箱
int j = i1;//自动拆箱
2.基本数据类型、包装类---->String类:调用String类的重载的valueOf(Xxx xx);
String类---->基本数据类型、包装类:调用相应的包装的parseXxx(String str);
注意:String str = "123";
int i = (int)str;是错误的转法。