Java类的设计----Object 类
Object类
Object类是所有Java类的根父类
如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
public class Person {
...
}
等价于:
public class Person extends Object {
. ...
}
例:
method(Object obj){…}//可以接收任何类作为其参数
Object o=new Person;
method(o);
==操作符与equals方法
==操作符与equals方法的区别:
==:引用类型比较引用(是否指向同一个对象);
Person p1=new Person(); Person p2=new Person();
if (p1==p2){…}
基本类型比较值;int a=5; if(a==6) {…}
用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;
equals()方法是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
特例:当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;
原因:在这些类中覆盖了equals()方法。
==操作符与equals方法举例
class TestEquals {
public static void main(String[] args) {
MyDate m1 = new MyDate(14, 3, 1976);
MyDate m2 = new MyDate(14, 3, 1976);
if ( m1 == m2 ) {
System.out.println("m1==m2");
} else {
System.out.println("m1!=m2"); //m1 != m2
}
if ( m1.equals(m2) ) {
System.out.println("m1 is equal to m2"); // m1 is equal to m2
} else {
System.out.println("m1 is not equal to m2");
}
}
}
Customer类
public class Customer {
private String customerName;
private String email;
public Customer(String customerName, String email) {
this.customerName = customerName;
this.email = email;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public boolean equals(Object obj) {
//1. 判定 obj 是否为 Customer 类型
if(!(obj instanceof Customer)) {
return false;
}
//2. 若为 Customer 类型, 则进行强制的类型转换
Customer customer = (Customer) obj;
//3. 比较其对应的属性是否相等. 比较字符串使用 equals 方法
return this.customerName.equals(customer.getCustomerName())
&& this.email.equals(customer.getEmail());
}
@Override
public String toString() {
return "Customer [customerName=" + customerName + ", email=" + email
+ "]";
}
}
TestObject类
public class TestObject {
public void method(Object object) {
}
public static void main(String[] args) {
TestObject to = new TestObject();
to.method(new Person());
to.method(new TestPerson());
/**
* Object 的 equals() 方法
* 1. == 比较的是两个对象是否指向同一个对象. 即: 是否指向同一块內存空间.
* 且要求 == 兩边的类型必须一致或存在着父子关系, 否则编译出错.
*
* 2. 需求: 有时候, 当两个对象的对应属性都一致时, 需要判定其相等! 使用 == 无法完成, 但可以借助于 equals() 方法
*
* 3. equals()方法是Object类的方法, 由于所有类都继承Object类, 也就继承了equals()方法。
*
* 4. equals() 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象. 可以比较任意兩个对象.
*
* 5. 可以在类中重写 equals 方法, 以达到定制比较相等的目的.
*
* 6. 对于 封装类, String, Date, File 等已经重写了其 equals 方法, 可以通过 equals 方法來判定其內容是否相同.
* 具体参考其 API
*
* 7. 比较两个字符串的內容是否相同, 一定要使用 equals() 方法, 而不能使用 ==
*/
Customer cust1 = new Customer("Tom", "tom@atguigu.com");
Customer cust2 = new Customer("Tom", "tom@atguigu.com");
//== 比较的是两个对象是否指向同一个对象. 即: 是否指向同一块內存空间.
System.out.println(cust1 == cust2); //false
System.out.println("cust1.equals(cust2): " + cust1.equals(cust2));
Man man = new Man();
//要求 == 两边的类型必须一致, 否则编译出错.
// System.out.println(cust1 == man);
System.out.println(cust1.equals(man));
Person p = new Person();
System.out.println(p == man);
String str1 = new String("abcd");
String str2 = new String("abcd");
System.out.println(str1.equals(str2));
}
}
MyDate类
public class MyDate {
private int year;
private int month;
private int day;
public MyDate(int day, int month,int year) {
super();
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof MyDate)){
return false;
}
MyDate md = (MyDate) obj;
return this.year == md.year
&& this.month == md.month
&& this.day == md.day;
}
}
TestEquals类
public class TestEquals {
public static void main(String[] args) {
MyDate m1 = new MyDate(14, 3, 1976);
MyDate m2 = new MyDate(14, 3, 1976);
if ( m1 == m2 ) {
System.out.println("m1==m2");
} else {
System.out.println("m1!=m2"); //m1 != m2
}
if ( m1.equals(m2) ) {
System.out.println("m1 is equal to m2"); // m1 is equal to m2
} else {
System.out.println("m1 is not equal to m2");
}
}
}
toString 方法
toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。
在进行String与其它类型数据的连接操作时,自动调用toString()方法
Date now=new Date();
System.out.println(“now=”+now);
相当于 System.out.println(“now=”+now.toString());//now=Date@122345
可以根据需要在用户自定义类型中重写toString()方法
如String 类重写了toString()方法,返回字符串的值。
s1=“hello”;
System.out.println(s1);//相当于System.out.println(s1.toString());
在ToString1.java中的类A里覆盖toString方法,使其输出类A对象的cint属性值。
基本类型数据转换为String类型时,调用了对应封装类的 toString()方法int a=10; System.out.println(“a=”+a);
public class TestToString {
public static void main(String[] args) {
Customer cust = new Customer("TongGang", "TongGang@atguigu.com");
/**
* toString():
* 1. Object 类定义的方法, 所以任何对象都可以来调用 toString() 方法
* 2. 默认情况下, toString() 方法 全类名@hash码
* 3. 可以根据需要重写 toString() 方法, 通常用于测试. 个别时候用于显示.
* 4. JDK 中的很多类都重写了 toString() 方法
*
*/
System.out.println(cust);
String str2 = new String("atguigu");
System.out.println(str2.toString());
Date date = new Date();
System.out.println(date.toString());
}
}
Java类的设计----Object 类的更多相关文章
- Java提高学习之Object类详解(1)
转自:http://www.importnew.com/10304.html 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父 ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
- java基础学习总结——Object类
一.Object类介绍
- 代码块和Java的API及Object类
代码块 局部代码块 特点: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 ...
- 最终父类【根类】:Object类&Objects类
一.java.lang.Object类 1.Object类介绍 Object类是所有类的父类.一个类都会直接或间接继承自该类: 该类中提供了一些非常常用的方法! 2.toString()方法 A: ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
- 【代码笔记】Java常识性基础补充(三)——Java的API及Object类、正则表达式、getTime()方法、DateFormat类、Calendar类
1.0 Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 2.0 Java API就是JDK中提供给我们使用的类,这些类将底层 ...
- Java的API及Object类、String类、字符串缓冲区
Java 的API 1.1定义 API: Application(应用) Programming(程序) Interface(接口) Java API就是JDK中提供给开发者使用的类,这些类将底层的代 ...
- 理解Java中对象基础Object类
一.Object简述 源码注释:Object类是所有类层级关系的Root节点,作为所有类的超类,包括数组也实现了该类的方法,注意这里说的很明确,指类层面. 所以在Java中有一句常说的话,一切皆对象, ...
随机推荐
- canvas相关api
1.线性径变:ctx.createLinearGradient(): var grd=ctx.createLinearGradient(0,0,170,0); grd.addColorStop(0,' ...
- GNU风格 ARM汇编语法4
.GNU汇编语言定义入口点 汇编程序的缺省入口是_start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点. 例:定义入口点 .section .data < initializ ...
- sqlserver判断是否为数字的函数
ISNUMERIC 确定表达式是否为一个有效的数字类型. 语法 ISNUMERIC ( expression ) 参数 expression 要计算的表达式. 返回类型 int 测试: select ...
- 强大的CSS3动画库animate.css
今天要给大家介绍一款强大的CSS3动画库animate.css,animate.css定义了大概50多种动画形式,包括淡入淡出,文字飞入.左右摇摆动画等等.使用animate.css也非常简单,你可以 ...
- Linux maven 下 jar包下载不下来的解决方法
在项目中遇到一个问题,使用推送的中间件,结果使用maven下载不下来,当时就直接手动下载后,copy到本地仓库了, 结果发布的时候遇到问题了. 因为发布是直接在测试服务器上,将提交的svn代码进行打包 ...
- [Makefile]多文件的通用Makefile
下面是一个糅合多线程和多文件的示例 emc-test.c #include <stdio.h> #include <pthread.h> #include "char ...
- Android——用对话框做登陆界面(自定义对话框AlertDialog,多线程,进度条ProgressDialog,ListView,GridView,SharedPreferences存,读数据,存取文本,assets文件)
效果: 1.点击图标进入页面二 2.页面2图片暂停显示5秒进入页面三 3.点击页面三登陆按钮,打开登陆对话框,输入密码进入页面四 点击下载按钮,显示水平进度条 点击保存和获取用户名和密码 进入页面六 ...
- Understand:高效代码静态分析神器详解(一)
Understand:高效代码静态分析神器详解(一) Understand 之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便 ...
- Hibernate注解关系映射
Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid) 1)一对一外键关联映射(单向) @O ...
- 多媒体开发之h264的三种字节流格式---annexb 哥伦布/mp4 以及还有一种rtp传输流格式
------------------------------------author:pkf ------------------------------------------time:2015-1 ...