Java学习日记DAY18
程序员文章站
2022-04-04 08:31:26
...
1.多态
1)多态变量和向上造型
一个变量可以保存其所声明的类型或该类型的任何子类型。
对象变量可以保存其声明的类型的对象,或该类型的任何子类型的对象。
Java中保存对象类型的变量是多态变量。“多态”这个术语(字面意思是许多形态)是指一个变量可以保存不同类型(即其声明的类型或任何子类型)的对象。
向上造型
2)多态
如果子类的方法覆盖了父类的方法,我们也说父类的那个方法在子类有了新的版本或者新的实现。覆盖的新版本具有与老版本相同的方法签名:相同的方法名称和参数表。因此,对于外界来说,子类并没有增加新的方法,仍然是在父类中定义过的那个方法。不同的是,这是一个新版本,所以通过子类的对象调用这个方法,执行的是子类自己的方法。
覆盖关系并不说明父类中的方法已经不存在了,而是当通过一个子类的对象调用这个方法时,子类中的方法取代了父类的方法,父类的这个方法被“覆盖”起来而看不见了。而当通过父类的对象调用这个方法时,实际上执行的仍然是父类中的这个方法。注意我们这里说的是对象而不是变量,因为一个类型为父类的变量有可能实际指向的是一个子类的对象。
当调用一个方法时,究竟应该调用哪个方法,这件事情叫做绑定。绑定表明了调用一个方法的时候,我们使用的是哪个方法。绑定有两种:一种是早绑定,又称静态绑定,这种绑定在编译的时候就确定了;另一种是晚绑定,即动态绑定。动态绑定在运行的时候根据变量当时实际所指的对象的类型动态决定调用的方法。Java缺省使用动态绑定。
3)系统类型
所有的类都是继承自Object类的
tostring 与 equals的用法
package lianxi;
public class CD {
private String name;
private String artist;
private int playingtime;
private boolean gotit=true;
public CD(String name, String artist, int playingtime) {
// super(name,playingtime);
this.name = name;
this.artist = artist;
this.playingtime = playingtime;
}
@Override
public String toString() {
return "CD [name=" + name + ", artist=" + artist + ", playingtime=" + playingtime + "]";
}
@Override
public boolean equals(Object obj) {
CD cc=(CD)obj;
return artist.equals(cc.artist);
}
public static void main(String[] args) {
CD cd=new CD("aa","bb",60);
CD cd1=new CD("aa","bb",60);
System.out.println(cd);//CD [name=aa, artist=bb, playingtime=60]
System.out.println(cd.equals(cd1));//true
}
// public void print() {
// System.out.print("CD:");
// super.print();
// System.out.println(":"+artist);
// }
}