904
技術社區[雲棲]
馬士兵J2SE-第三章-麵向對象-Object類:toString方法、equals方法、對象轉型、抽象類抽象方法、final關鍵字、接口
toString方法
public class test {
public static void main(String[] args) {
Teacher t=new Teacher();
System.out.println("1 "+t+" 2 "+t.toString());
}
}
class Teacher {
public String toString() {
return "I am a teacher";
}
}
輸出:
1 I am a teacher 2 I am a teacher
說明:
public String toString() {return "I am a teacher";}不能寫成大寫的public String ToString!
重寫必須要COPY過來!
toString
public String toString()
- 返回該對象的字符串表示。通常,
toString方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易於讀懂的信息表達式。建議所有子類都重寫此方法。Object類的toString方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進製表示組成。換句話說,該方法返回一個字符串,它的值等於:getClass().getName() + '@' + Integer.toHexString(hashCode())
-
- 返回:
- 該對象的字符串表示形式。
認識一下toString方法,並且重寫父類方法!
equals方法:
public class test {
public static void main(String[] args) {
Cat c1=new Cat(1,2,3);
Cat c2=new Cat(1,2,3);
System.out.println(c1==c2);
}
}
class Cat {
int color;
int height,weight;
public Cat(int color,int height,int weight) {
this.color=color;
this.height=height;
this.weight=weight;
}
}
//永遠不等,比較的是地址
輸出:
false
public class test {
public static void main(String[] args) {
Cat c1=new Cat(1,2,3);
Cat c2=new Cat(1,2,3);
System.out.println(c1==c2);
System.out.println (c1.equals(c2));
}
}
class Cat {
int color;
int height,weight;
public Cat(int color,int height,int weight) {
this.color=color;
this.height=height;
this.weight=weight;
}
//重寫方法
public boolean equals(Object obj) {
return true;
}//永遠都相等,不好!就是寫在這裏需要注意一下重寫要從JDK文檔中COPY一下
}
//永遠不等,比較的是地址
輸出:
false
true
重寫equals方法正確寫法
public class test {
public static void main(String[] args) {
Cat c1=new Cat(1,2,3);
Cat c2=new Cat(1,2,3);
System.out.println(c1==c2);
System.out.println (c1.equals(c2));
}
}
class Cat {
int color;
int height,weight;
public Cat(int color,int height,int weight) {
this.color=color;
this.height=height;
this.weight=weight;
}
//重寫方法
public boolean equals(Object obj) {
if(obj==null) return false;
else {
if(obj instanceof Cat) {//如果obj是貓對象的一個引用
Cat c=(Cat)obj;//obj強製轉化為貓類型
if(c.color==this.color&&c.height==this.height&&c.weight==this.weight) {
return true;
}
}
}
return false;
}
}
輸出:
false
true
public class test {
public static void main(String[] args) {
Cat c1=new Cat(1,2,3);
Cat c2=new Cat(1,2,3);
System.out.println(c1==c2);
System.out.println (c1.equals(c2));
String s1=new String("Hello");
String s2=new String("Hello");
System.out.println(s1==s2);
//java.lang包下的string重寫了equals方法
//將此字符串與指定的對象比較。當且僅當該參數不為 null,並且是與此對象表示相同字符序列的 String 對象時,結果才為 true。
System.out.println(s1.equals(s2));//s2不為空,是true
}
}
class Cat {
int color;
int height,weight;
public Cat(int color,int height,int weight) {
this.color=color;
this.height=height;
this.weight=weight;
}
//重寫方法
public boolean equals(Object obj) {
if(obj==null) return false;
else {
if(obj instanceof Cat) {//如果obj是貓對象的一個引用
Cat c=(Cat)obj;//obj強製轉化為貓類型
if(c.color==this.color&&c.height==this.height&&c.weight==this.weight) {
return true;
}
}
}
return false;
}
}
輸出:
false
true
false
true
equals
public boolean equals(Object obj)
- 指示其他某個對象是否與此對象“相等”。
equals方法在非空對象引用上實現相等關係:-
自反性:對於任何非空引用值
x,x.equals(x)都應返回true。 -
對稱性:對於任何非空引用值
x和y,當且僅當y.equals(x)返回true時,x.equals(y)才應返回true。 -
傳遞性:對於任何非空引用值
x、y和z,如果x.equals(y)返回true,並且y.equals(z)返回true,那麼x.equals(z)應返回true。 -
一致性:對於任何非空引用值
x和y,多次調用 x.equals(y) 始終返回true或始終返回false,前提是對象上equals比較中所用的信息沒有被修改。 - 對於任何非空引用值
x,x.equals(null)都應返回false。
Object類的 equals 方法實現對象上差別可能性最大的相等關係;即,對於任何非空引用值x和y,當且僅當x和y引用同一個對象時,此方法才返回true(x == y具有值true)。注意:當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼。
-
自反性:對於任何非空引用值
-
- 參數:
-
obj- 要與之比較的引用對象。 - 返回:
- 如果此對象與 obj 參數相同,則返回
true;否則返回false。 - 另請參見:
-
hashCode(),Hashtable
對象轉型:
class Animal {
public String name;
Animal(String name) {
this.name=name;
}
}
class Cat extends Animal {
public String eyesColor;
Cat(String n,String c) {
super(n);
eyesColor=c;
}
}
class Dog extends Animal {
public String furcolor;
Dog(String n,String c) {
super(n);
furcolor=c;
}
}
public class test {
public static void main(String[] args) {
Animal a=new Animal("name");
Cat c=new Cat("name","blue");
Dog d=new Dog("dogname","black");
System.out.println(a instanceof Animal);//true
System.out.println(c instanceof Animal);//true
System.out.println(d instanceof Animal);//true
System.out.println(a instanceof Cat);//false
a=new Dog("bigyellow","yellow");;
System.out.println(a.name);//bigyellow
//System.out.println(a.furname);//error!
System.out.println(a instanceof Animal);//true
System.out.println(a instanceof Dog);//true
Dog d1=(Dog)a;//要加強製你轉換符
System.out.println(d1.furcolor);//yellow
}
}
輸出:
true
true
true
false
bigyellow
true
true
yellow
class Animal {
public String name;
Animal(String name) {
this.name=name;
}
}
class Cat extends Animal {
public String eyesColor;
Cat(String n,String c) {
super(n);
eyesColor=c;
}
}
class Dog extends Animal {
public String furcolor;
Dog(String n,String c) {
super(n);
furcolor=c;
}
}
public class test {
public static void main(String[] args) {
test testdemo=new test();
Animal a=new Animal("name");
Cat c=new Cat("catname","blue");
Dog d=new Dog("dogname","black");
testdemo.f(a);
testdemo.f(c);
testdemo.f(d);
}
public void f(Animal a) {
System.out.println("name:"+a.name);
if(a instanceof Cat) {
Cat cat=(Cat) a;
System.out.println(" "+cat.eyesColor+" eyes");
}
else if(a instanceof Dog) {
Dog dog =(Dog) a;
System.out.println(" "+dog.furcolor+" fur");
}
}
}輸出:
name:name
name:catname
blue eyes
name:dogname
black fur
abstract class Animal {//有了抽象方法,這個類必須被聲明為抽象類
private String name;
Animal(String name) {this.name = name;}
/*
public void enjoy(){
System.out.println("叫聲......");
}
*/
//抽象類的方法沒有寫的必要
public abstract void enjoy();//隻有;沒有左右大括號定義,相當於C++裏的純虛函數
}
abstract class Cat extends Animal {
private String eyesColor;
Cat(String n,String c) {super(n); eyesColor = c;}
/*
public void enjoy() {
System.out.println("貓叫聲......");
}
*/
//public abstract void enjoy();
}
class Dog extends Animal {
private String furColor;
Dog(String n,String c) {super(n); furColor = c;}
public void enjoy() {
System.out.println("狗叫聲......");
}
}
class Bird extends Animal {
Bird() {
super("bird");
}
public void enjoy() {
System.out.println("鳥叫聲......");
}
}
class Lady {
private String name;
private Animal pet;
Lady(String name,Animal pet) {
this.name = name; this.pet = pet;
}
public void myPetEnjoy(){pet.enjoy();}
}
public class test {
public static void main(String args[]){
//Cat c = new Cat("catname","blue");//抽象的類是殘缺的類,NEW不出來
Dog d = new Dog("dogname","black");
Bird b = new Bird();
//Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
Lady l3 = new Lady("l3",b);
//l1.myPetEnjoy();
l2.myPetEnjoy();
l3.myPetEnjoy();
}
}
輸出:
狗叫聲......
鳥叫聲......
final關鍵字
public class test {
public static void main(String[] args) {
T t=new T();
System.out.println(t.i);
}
}
final class T {
final int i = 8;
public final void m() {
//j=9;
}
}
輸出:
8
說白了,就是隻可以讀不可以寫
接口:
interface Singer {
public void sing();
public void sleep();
}
interface Painter {
public void paint();
public void eat();
}
class Student implements Singer {
private String name;
Student(String name) {
this.name=name;
}
public void study() {
System.out.println("studying");
}
public String getName() {
return name;
}
public void sing() {
System.out.println("student is singing");
}
public void sleep() {
System.out.println("student is sleeping");
}
}
class Teacher implements Singer,Painter {
private String name;
public String getString() {
return name;
}
Teacher(String name) {this.name=name;}
public void teach() {
System.out.println("teacher is teaching");
}
public void sing() {
System.out.println("teacher is singing");
}
public void sleep() {
System.out.println("teacher is sleeping");
}
public void eat() {
System.out.println("teacher is eating");
}
@Override
public void paint() {
// TODO Auto-generated method stub
System.out.println("teacher is painting");
}
}
public class test {
public static void main(String[] args) {
Singer s1=new Student("tom");
s1.sing();
s1.sleep();
Teacher t1=new Teacher("jack");
t1.eat();
t1.sing();
t1.sleep();
t1.paint();
Painter p1=(Painter)t1;
p1.paint();
p1.eat();
}
}
輸出:
student is singing
student is sleeping
teacher is eating
teacher is singing
teacher is sleeping
teacher is painting
teacher is painting
teacher is eating
最後更新:2017-04-02 06:52:05