Java中的超类 Object

步骤 1 : Object类是所有类的父类

声明一个类的时候,默认是继承了Object

public class Hero extends Object

package charactor;

import property.Item;

public class Hero extends Object {

    String name; //姓名

    float hp; //血量

    float armor; //护甲

    int moveSpeed; //移动速度

    public void useItem(Item i){
System.out.println("hero use item");
i.effect();
} public Hero(){
System.out.println("Hero的无参的构造方法 ");
} public Hero(String name){
System.out.println("Hero的有一个参数的构造方法 ");
this.name = name;
} public static void main(String[] args) {
new Hero();
} }

步骤 2 : toString()

Object类提供一个toString方法,所以所有的类都有toString方法

toString()的意思是返回当前对象的字符串表达

通过 System.out.println 打印对象就是打印该对象的toString()返回值

package charactor;

public class Hero {
public String name;
protected float hp; public String toString(){
return name;
} public static void main(String[] args) { Hero h = new Hero();
h.name = "盖伦";
System.out.println(h.toString());
//直接打印对象就是打印该对象的toString()返回值
System.out.println(h);
}
}

步骤 3 : finalize()

当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件

当它被垃圾回收的时候,它的finalize() 方法就会被调用。

finalize() 不是开发人员主动调用的方法,而是由虚拟机JVM调用的。

package charactor;

public class Hero {
public String name;
protected float hp; public String toString(){
return name;
} public void finalize(){
System.out.println("这个英雄正在被回收");
} public static void main(String[] args) {
//只有一引用
Hero h;
for (int i = 0; i < 100000; i++) {
//不断生成新的对象
//每创建一个对象,前一个对象,就没有引用指向了
//那些对象,就满足垃圾回收的条件
//当,垃圾堆积的比较多的时候,就会触发垃圾回收
//一旦这个对象被回收,它的finalize()方法就会被调用
h = new Hero();
} }
}

步骤 4 : equals()

equals() 用于判断两个对象的内容是否相同

假设,当两个英雄的hp相同的时候,我们就认为这两个英雄相同

package charactor;

public class Hero {
public String name;
protected float hp; public boolean equals(Object o){
if(o instanceof Hero){
Hero h = (Hero) o;
return this.hp == h.hp;
}
return false;
} public static void main(String[] args) {
Hero h1= new Hero();
h1.hp = 300;
Hero h2= new Hero();
h2.hp = 400;
Hero h3= new Hero();
h3.hp = 300; System.out.println(h1.equals(h2));
System.out.println(h1.equals(h3));
}
}

步骤 5 : ==

这不是Object的方法,但是用于判断两个对象是否相同

更准确的讲,用于判断两个引用,是否指向了同一个对象

package charactor;

public class Hero {
public String name;
protected float hp; public boolean equals(Object o){
if(o instanceof Hero){
Hero h = (Hero) o;
return this.hp == h.hp;
}
return false;
} public static void main(String[] args) {
Hero h1= new Hero();
h1.hp = 300;
Hero h2= new Hero();
h2.hp = 400;
Hero h3= new Hero();
h3.hp = 300; System.out.println(h1==h2);
System.out.println(h1==h3); }
}

步骤 6 : hashCode()

hashCode方法返回一个对象的哈希值

步骤 7 : 线程同步相关方法

Object还提供线程同步相关方法

wait()

notify()

notifyAll()

步骤 8 : getClass()

getClass()会返回一个对象的类对象

练习Object

重写Item的 toString(), finalize()和equals()方法

toString() 返回Item的name + price

finalize() 输出当前对象正在被回收

equals(Object o) 首先判断o是否是Item类型,然后比较两个Item的price是否相同

答案

package property;

public class Item extends Object {
String name;
int price; public String toString() {
return "叫做 " + name + " 的物品,其价格是 " + price;
} public void finalize() {
System.out.println("回收叫做 " + name + " 的物品");
} public boolean equals(Object o) {
if (o instanceof Item) {
Item i = (Item) o;
if (i.price == this.price)
return true;
else
return false;
}
return false;
} }

Java自学-接口与继承 Object类的更多相关文章

  1. Java自学-接口与继承 抽象类

    Java 抽象类 在类中声明一个方法,这个方法没有实现体,是一个"空"方法 这样的方法就叫抽象方法,使用修饰符"abstract" 当一个类有抽象方法的时候,该 ...

  2. Java自学-接口与继承 final

    Java的修饰符final final修饰类,方法,基本类型变量,引用的时候分别有不同的意思. 示例 1 : final修饰类 当Hero被修饰成final的时候,表示Hero不能够被继承 其子类会出 ...

  3. Java自学-接口与继承 对象转型

    Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...

  4. Java自学-接口与继承 接口

    设计Java的接口 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果. 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们 ...

  5. Java自学-接口与继承 多态

    Java的多态 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父类引用指向子类对象 示例 1 : 操作符的多态 同一个操作符在不同情境下,具备不同的作用 如果+号两侧都是整型,那么 ...

  6. Java中interface是否继承Object类

    首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...

  7. Java自学-接口与继承 UML图

    UML 图 步骤 1 : UML 图 -- 类之间的关系 UML-Unified Module Language 统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系 步骤 2 : ...

  8. Java自学-接口与继承 默认方法

    默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法 Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现 ...

  9. Java自学-接口与继承 内部类

    Java 内部类 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤 1 : 非静态内部类 非静态内部类 BattleScore "战斗成绩" 非静态内部类可以直接在 ...

随机推荐

  1. 如何将MultipartFile转换成based4

    public String test(MultipartFile file) throws Exception{ BASE64Encoder base64Encoder =new BASE64Enco ...

  2. JDK9下载与安装

    1.进入oracle官网下载页面 https://www.oracle.com/downloads/index.html 2.点击Menu 3.点击JAVA SE 4.点击JDK Download 5 ...

  3. mysql 之编码配置、引擎介绍、字段操作、数据类型及约束条件

    数据库的配置 # 通过配置文件统一配置的目的: 统一管理 服务端(mysqld) 客户端(client) 配置了mysqld(服务端)的编码为utf8, 那么再创建的数据库,默认编码都采用utf8. ...

  4. 【oracle】处理锁表

    查询锁表 select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session swhe ...

  5. 【Linux】查看端口和进程

    netstat -tunlp ps -ef|grep process_name

  6. 网络协议 9 - TCP协议(下)

    上次了解了 TCP 建立连接与断开连接的过程,我们发现,TCP 会通过各种“套路”来保证传输数据的安全.除此之外,我们还大概了解了 TCP 包头格式所对应解决的五个问题:顺序问题.丢包问题.连接维护. ...

  7. sort函数实现多条件排序

    js的sort方法,我们一般传入一个回调用于单排序,也就根据某一个条件排序,那么一个场景需要多条件排序(多重排序),我们怎么处理呢? 如下例子,我们按学生的总分排序,如果总分相等,我们再按照语文成绩排 ...

  8. C语言实现Linux之ls

    ls命令用来显示目标列表. 常用参数: -l    :以长格式显示目录下的内容列表.输出信息从左向右依次包括文件名,文件类型,权限模式,硬连接数,所有者.组.文件大小和文件的最后修改时间等: -a   ...

  9. vue自学小demo----前端

    vue学习的小demo,实现简单的页面项目的增删 代码如下 <!DOCTYPE html> <html> <head> <meta charset=" ...

  10. Oracle_创建自增

    create sequence SEQ_ChamberMapping_ID minvalue maxvalue start with increment by nocache order; CREAT ...