类
今日份学习类的继承,Object类和Object类中的三个重要方法(getClass()方法,toString()方法,equals()方法)。
- 类的继承
继承使整个程序架构具有一定的弹性,它不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。
在JAVA语言中,一个类继承另一个类需要使用关键字extends。
【例】class Child extends Parent{}
子类在继承父类之后可以调用父类创建好的属性和方法。JAVA虽然不允许同时继承两个父类,但可以有多继承关系。(祖父>父>儿子>孙子)
【例】在电话的基础上衍生出手机类
class Telephone{
String button="button:0~9";
void call() {
System.out.println("开始拨打电话");
}
}
class Mobile extends Telephone{
String screen="screen:液晶屏";
}
public class Demo {
public static void main(String[] args) {
Mobile motto=new Mobile();
System.out.println(motto.button);
System.out.println(motto.screen);
motto.call();
}
}
结果为:
- Object类
在Java中所有的类都直接或间接的继承了java.lang.Object类。
Object类是所有类的父类,是Java类层中的最高层类。Java中的每个类都源自于java.lang.Object类,自定义的类也都继承于Object类。由于所有类都是Object类的子类,所以在定义类时可省略extends Object。
在Object类中,主要包括clone()、finalize()、toString()等方法。由于所有的类都是Object类的子类,所以所有类都可以重写Object类的方法。
(Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,这些方法被定义为final类。)
其中,Object类中的几个重要方法为:
- getClass()返回对象执行时的Class实例。
getClass().getname();
可以将getClass()方法与toString()方法联合使用。 - toString()toString()方法的功能是将一个对象返回为字符串的形式,会返回一个Strmg实例。
当这个类转换为字符串或与字符串连接时,将自动调用重写的toString()方法。
【例】让学生自我介绍
public class Student {
String name;
int age;
public Student(String name,int age) {
this.name=name;
this.age=age;
}
public String toString() {
return "我叫"+name+",今年"+age+"岁。";
}
public static void main(String[] args) {
Student s1=new Student("李一",16);
System.out.println(s1);
Student s2=new Student("李二",9);
System.out.println(s2);
}
}
结果为: - equals()(java中比较对象的一种方式)
Java中有两种比较对象方式:
“==”运算符和equals()方法。
“==”运算法比较的是两个对象引用内存的地址是否一样,equals()方法比较的是两个对象的实际内容。
【例】根据身份证号判断是否为同一人
public class People {
int id;
String name;
public People(int id,String name) {
this.id=id;
this.name=name;
}
public boolean equals(Object obj) {
if(this==obj)
return true;
if(this==null)
return false;
if(getClass()!=obj.getClass())
return false;
People other=(People)obj;
if(id!=other.id)
return false;
return true;
}
public String toString() {
return name;
}
public static void main(String[] args) {
People p1=new People(445,"李一");
People p2=new People(445,"李二");
People p3=new People(447,"李三");
Object o=new Object();
System.out.println(p1+"与"+p2+"是否为同一人?");
System.out.println("equals()方法的结果是:"+p1.equals(p2));
System.out.println("==运算符的结果:"+(p1==p2));
System.out.println();
System.out.println(p1+"与"+p3+"是否为同一人?");
System.out.println(p1.equals(p3));
System.out.println(p1+"与"+o+"是否为同一人?");
System.out.println(p1.equals(o));
}
}
结果为:
由上述例子可看出,如果身份证号相同,equals()方法判断出这两个对象实际上是同一个,而“==”运算符无法作出有效判断;如果两个对象的身份证号不同,或者两个对象的类型都不同,equals()方法就会认为两者不是一个人。