package test0905;
public class EqualsTest {
public static void main(String[] args) {
/* String s1 = "北京";
String s2 = "北京";
if( s1 == s2 ){ //地址相等吗
System.out.println("地址相等。");
System.out.println("s1和s2引用的是同一个对象。");
}else {
System.out.println("地址不相等。");
System.out.println( "s1和s2引用的不是同一个对象。");
}
boolean flag = s1.equals(s2); //比较s1和s2对应的对象是否相等。
if( flag ){
System.out.println("s1>>>" + s1 + " 等于 " + "s2>>>" + s2 );
}else{
System.out.println("s1>>>" + s1 + " 等于 " + "s2>>>" + s2 );
}
String g1 = new String("北京"); //要创建一个新对象
String g2 = new String("北京");
if( g1 == g2 ){
System.out.println(" g1 等于 g2 ");
System.out.println(" g1 和 g2 引用的是同一个对象。");
}else{
System.out.println("g1 不等于 g2 ");
System.out.println("g1和g2引用的是两个独立的对象。");
}
flag = g1.equals(g2);
if( flag ){
System.out.println("\ng1>>>" + g1 + " 等于 g2>>>" + g2 );
}else{
System.out.println("\ng1>>>" + g1 + " 不等于 g2>>>" + g2 );
}*/
Dog d1 = new Dog("AAA" , true, 1 );
Dog d2 = new Dog("AAA" , true, 1 );
if( d1 == d2 ){ //判断地址
System.out.println("d1和d2引用的是同一个对象。");
}else{
System.out.println("d1和d2引用的是两个独立的对象。");
}
boolean flag = d1.equals(d2); //判断对象是否相等。
if( flag ){
System.out.println("d1 和 d2 对应的对象完全相等。");
}else{
System.out.println("d1 和 d2 对应的对象不相等。");
}
System.out.println("\nd1>>> " + d1 );
System.out.println( "d2>>> " + d2 );
}
}
class Dog { //此类的父类为 Object
private String name;
private boolean sex;
private int age;
public Dog(String name, boolean sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getInfo(){
return "" + name + " " + (sex ? "公": "母") + " " + age;
}
//重写equals()方法,目的: 按自已的条件来比较两个对象相等。
public boolean equals(Object obj) {
Dog d2 = (Dog)obj; //强制转型:将Object 强制转化为 Dog类型;
if( this.name.equals( d2.name) && this.sex == d2.sex && this.age == d2.age ){
return true;
}else{
return false;
}
}
//重写toString()方法,目的:便于以字符串方式反馈对象的信息,且该方法是默认被调用的。
public String toString() {
return "" + name + " " + (sex ? "公": "母") + " " + age;
}
}
package test0905;
/*
* 1、一个纯英文的关系运算符: instanceof 属于。用来判断对象是否属于某个类。
*
* 2、在Java语言中,一个父类的对象变量可以引用本类的对象。另外,还可引用子类的对象。
*
* 例如: Person p1 = new Person();
*
* p1 = new Student();
*
* 3、当一个父类的对象变量引用了子类的对象时,
* 若通过父类的对象变量去访问继承来的方法,则是可以的。
* 若通过父类的对象变量去访问子类特有的成员(实例变量和方法),则不可直接访问;需要强制转换。
* 强制转换的格式: (子类名)(父类的对象变量);
*
* 例如: Person p1 = new Student();
* p1.getName(); //则是合法的。
*
* p1.getSchool(); //则不可直接调用。非法的。
*
* 因此,需要先将p1强制转换成Student类型的引用。之后,再去调用getSchool()
* 1) Student st = (Student)p1; //将父类的引用强制转换成子类的引用。
* 2) st.getSchool();
*
* 4、由于Object类是所有类的祖先,然而,前面讲过: 父类的对象变量可以引用子类的对象。
*
* 因此,Object类的对象变量可以引用任何类的对象。
*
* 例如: Object obj = new Object();
* obj = new Person();
* obj = new Student();
* obj = new Dog();
*
*
*/
public class InstanceofTest{
public static void main(String[] args) {
Animal a1 = new Animal("动物");
Cat c1 = new Cat( "小猫", "blue" );
if( a1 instanceof Animal ){
System.out.println("a1属于Animal.");
}
if( a1 instanceof Cat ){
System.out.println("a1属于Cat");
}else{
System.out.println("a1不属于Cat ");
}
if( c1 instanceof Cat ){
System.out.println("c1属于Cat");
}
if( c1 instanceof Animal ){
System.out.println("c1属于Animal");
}
a1 = new Cat("波斯猫", "blue");
if( a1 instanceof Animal ){
System.out.println("a1属于Animal。");
}
if( a1 instanceof Cat ){
System.out.println( "a1也属于Cat");
}
System.out.println("\n小猫的名称是: "+ a1.name );
Cat c2 = (Cat)a1;
System.out.println("以上小猫的眼睛的色彩是: " + c2.eyesColor); //a1.eyesColor );
}
}
class Animal {
public String name;
public Animal() {
}
public Animal( String name ) {
this.name = name;
}
@Override
public String toString() {
return "name = " + name ;
}
}
class Cat extends Animal {
public String eyesColor;
public Cat() {
}
public Cat( String name, String eyesColor ){
super( name );
this.eyesColor = eyesColor;
}
@Override
public String toString() {
return super.toString() + " eyesColor = " + eyesColor ;
}
}