强制类型转换cast
案例笔记:
新建三个类
Person类
public class Person {
public void test() {
System.out.println("这是person的test");
}
}
子类Student
public class Student extends Person {
public void getSchool() {
System.out.println("这是student 的 test");
}
}
Test类
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.method(new Person());
}
public void method(Person e) {
if(e instanceof Student) {
Student s = (Student) e;//判断e是不是student里面的
s.getSchool();//是的话调用student里面的方法
}else {
e.test();//否则 调用person里的test方法
}
}
}
打印结果 这是person的test
如果把test类中第六行代码改为t.method(new Student());
打印结果 这是student 的 test
知识点:
== 和 equals 的异同
格式: a == b
格式 :a.equals(b)
String s1 = new String("abcd");
String s2 = new String("abcd");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
代码分析:
s1和s2是两个不同的对象,分配了不同的地址,但是地址里面内容是一样的
笔记:
对于对象来说:
-
特殊的类,如string ,file,data ,使用==的时候比较的是对象的地址,equals比较的是内容。
-
除了特殊类, == 和 equals,比较的都是对象的内存地址
-
如果你想改变一个类的equals, 不想用equals来比较对象的内存地址,就要重写方法。
String 对象的创建方式
笔记:
-
先在常量池里判断是否有abc,
-
字面量创建对象的时候,只在常量池创建对象(节约内存)
-
new方法时候,常量池有对象,堆中也有对象
练习
1.编写Order类,有int型的orderId,String型的OrderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public
boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。
题目分析,用的之前学习的知识点,构造器,get set方法。方法的重写!
public class Order {
/**
* 建立构造器
* @param orderId
* @param orderName
*/
public Order(int orderId, String orderName) {
this.orderId = orderId;
this.orderName = orderName;
}
int orderId;
String orderName;
/**
* get set 代码是自动生成的,方法见上一个博客
* @return
*/
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
/**
* 下面的代码也是自动生成的,alt+/,选择override
*/
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
boolean flag = false;
if(obj instanceof Order) {
Order o = (Order) obj;
if(this.orderId == o.orderId && this.orderName.equals(orderName)) {
flag = true;
}
}
return flag;
}
public static void main(String[] args) {
Order o1 = new Order(123, "liming");
Order o2 = new Order(123, "liming");
System.out.println(o1.equals(o2));
}
}