Java学习
Obeject类是所有Java类的直接或间接超类。在类中未声明自己的权限的,权限均默认为包一级,只能在包内使用,而声名成public的能在整个程序中使用(整个程序可能包含多个包)。
• 两个对象具有相同的类型以及相同的属性值,则称二者相等(equal)。
• 如果两个引用变量指向的是同一个对象,则称这两个引用变量同一(identical)。
• 两个对象同一,则肯定相等。
• 两个对象相等,却不一定同一。
• 怎样判断相等和同一?
• 比较运算符“==” 判断的是这两个对象是否同一。
• equals()方法也是判断两个对象是否同一。
• 覆盖equals()方法,修改其功能,可以判断两个对象是否相等。
例子:
public class BankAccount {
String ownerName;
int accountNumber;
float balance;
}
public class Tester4 {
public static void main(String[] args) {
BankAccount a = new BankAccount("Bob", 123456, 100.00f);
BankAccount b = a;
if (a.equals(b)) //a、b指向同一对象
System.out.println("YES");
else
System.out.println("NO");
}
}
判断两个对象是否相等,必须使用(b)。
a.==
b.equals()方法,并且必须覆盖equals()方法。
例子:判断两个对象是否相等
public boolean equals(Object x) { //覆盖超类的equals()方法
if (this.getClass() != x.getClass()) //是否属于同一类对象
return false;
BankAccount b = (BankAccount) x;
return ((this.getOwnerName().equals(b.getOwnerName()))
&&(this.getAccountNumber() == b.getAccountNumber())
&&(this.getBalance() == b.getBalance()));//是否相等
}
在对象被垃圾回收器回收之前,系统自动调用对象的finalize()方法。
• 如果要覆盖finalize方法,覆盖方法的最后必须调用super.finalize。
• 通过getClass方法可以获得一个对象所属类的信息。
• 它是final 方法,返回一个Class对象,用来代表对象所属的类。通过Class 对象,可以查询类的各种信息:比如名字、超类、实现接口的名字等。
例:
(
1)void PrintClassName(Object obj) {
System.out.println("The Object's class is " +
obj.getClass().getName());}
(
2)if (this.getClass() != x.getClass()) //是否属于同一类对象
return false;
抽象类是代表一个抽象概念的类,它规定了整个类族都必须具备的属性和行为。
• 抽象类的特点
• 抽象类只表示抽象的概念,不能使用new方法进行实例化,只能用作超类;
• 抽象类可包含常规类能包含的任何成员;
• 可以包括非抽象方法,一定要包含有抽象方法(用abstract修饰,只有方法原型,没有方法的具体实现)只有当子类实现了抽象超类中的所有抽象方法,子类才不是抽象类,才能产生实例;如果子类中仍有抽象方法未实现,则子类也只能是抽象类。
抽象方法在超类中规定了子类应该具有的行为,在抽象超类中尚不能实现的方法,可以声明为抽象方法,在子类中去实现它。
• 抽象方法声明的语法形式public abstract <返回值类型> <方法名>(...);
• 抽象方法的特点
• 仅有方法原型,而没有方法体;
• 抽象方法的具体实现在子类中完成;
• 仅可在抽象类声明抽象方法。
例如:各种图形都需要实现绘图方法,可在它们的抽象超类中声明一个draw抽象方法。
abstract class GraphicObject {
int x, y;
void moveTo(int newX, int newY) { . . . }
abstract void draw();
}
例子:
public abstract class GraphicObject {
public abstract void draw();
}
public class Circle extends GraphicObject {
public void draw(){
System.out.println("Draw a circle.");
}
}//只能继承一个抽象类
public class Rectangle extends GraphicObject{
public void draw(){
System.out.println("Draw a rectangle.");
}
}//只能继承一个抽象类
public class Test {
public static void main(String[] args) {
Circle c=new Circle();
Rectangle r=new Rectangle();
c.draw();
r.draw();}
本文来自博客园,作者:天勤也,转载请注明原文链接:https://www.cnblogs.com/XB-gzx/p/15487065.html

浙公网安备 33010602011771号