`

向下转型与instanceof 关键字,object类(系统类)中的常用方法

    博客分类:
  • j2se
 
阅读更多
第一:向下转型
1.向下转型:
Animal a=new Dog(); Dog d=(Dog)a;这就是向下转型,注意Dog d=(Dog)a中必须是Dog类型的a才行。向下转型以后就不是多肽了

2.instanceof 关键字的引出:
向下转型以后将失去多肽的效果,向下转型指向转变成具体的子类,因此不能统一写的能力了(不能统一写成animal类了,只能把animal分别写成dog,cat,pig)。但是此对象到底是dog、cat、pig中的哪个呢?为了解决这个问题,我们引入了instanceof 关键字,用instanceof 做出判断

3.instanceof 关键字的使用:
if(ani instanceof Dog),这是向下转型的时候用到的。判断ani这个变量是不是dog类型,如果是dog的话,就可以向下转型成dog:Dog d=(Dog)ani

第二:object类:
1.object类的定义
object类是所有类的父类,所有类都实现这个类的方法。一个类间接或者直接的继承了object类。

2.object类的声明
  Object obj=new 任何对象。
注意:object类可以声明成任何类型的对象,因为object类是根类,此时就相当于发生了向上转型了。因为任何类默认情况下就继承了object类

3.object类的常用方法:
1).==:比较的是栈内存的地址
2).equals:默认(object类)比较的也是栈内存的地址,我们可以重写object(父类)中的equals方法,让他比较堆内存的属性值(数据).
3).tostring是输出对象的地址,我们可以重写,重写获得对象属性值(具体值)
4).finalize:垃圾回收器,释放系统资源:当对象的引用消失了就把该对象回收了。也就是栈内存没有了,相应的堆内存数据就是垃圾了。堆内存数据不会立马回收
5).System.gc(),这是启动垃圾回收器,立马回收。如果不写这个方法的话,就由java虚拟机来回收,但是不是立马回收。
当程序结束的时候,该程序在内存中对应的.class文件将消失,当垃圾回收器确定不存在该对象的引用的时候,由垃圾回收器调用object类的finalize方法将此对象回收。释放资源

4.==是比较的地址,那么equals为什么也是比较地址呢?
因为object类中的equals方法是这样写的:
public  boolean equals(Object obj){return (this==obj)},其中this就是调用equals方法的那个对象,所以虽然用了equals,但是最后还是用==进行比较的。

5.obejct类的equals默认比较的是地址,那么子类继承object类之后需要重写equals方法来比较两个对象的具体数据。
//重写父类中的equals方法,比较两个对象的属性值或者内容
public boolean equals(Object obj)
{
if(this==obj)
return true;
if(!(obj instanceof Student))
return false;
Student s =(Student)obj;
if(this.sno==s.sno&&this.age==s.age)
{
return true;
}
return false;
}

6.toString()方法在object类中默认比较的也是栈内存的地址,为了让tostring方法比较具体数据,就需要对tostring进行重写(当打印一个对象的时候,会默认调用toString(),默认获得对象的地址:system.out.print("s="+s)相当于system.out.print("s="+s.toString()))

//重写toString ,返回对象的内容
public String toString()
{
return "学号:"+sno+" 年龄:"+age;
}

7.finalize方法在object类中是这样定义的:
protected void finalize throws Throwable(){},
该方法不是抽象方法,但是方法体中没东西。



分享到:
评论

相关推荐

    一文理解cast向下转换内部代码

    而向下转型则需要显式Cast,因为它涉及到将父类对象转换为子类对象,这个过程可能会失败,如果父类对象实际上不是那个子类的实例。 在"SV(SystemVerilog)验证"中,Cast操作也扮演着重要角色。SystemVerilog是一种...

    java基础篇学习笔记

    向下转型则是将父类对象转换为子类对象,需要显式进行。`instanceof`关键字用于检查对象是否是某一类的实例。 Java中的`Object`类是所有类的基类,提供了如`equals()`、`hashCode()`和`toString()`等通用方法。抽象...

    java第05章.面向对象编程-2.pdf

    向上转型是将子类对象赋值给父类引用,而向下转型则是将父类引用赋值给子类对象,这种操作需要使用类型转换操作符。此外,多态还允许使用instanceof关键字来判断一个对象是否为特定类的实例。Java通过简单工厂模式来...

    多态.docx

    2. **向下转型(Downcasting)**:需要显式转换,例如`(Circle) a`。将父类引用转换为子类类型时,需要确保父类对象实际上是子类实例,否则会抛出`ClassCastException`。使用`instanceof`关键字可以检查一个对象是否...

    程序设计4PPT课件.pptx

    2. **向下转型**:需要使用强制转换,从父类转换为子类。 3. **`instanceof`操作符**:用于检查对象是否属于特定类或接口。 4. **`Object`类和`equals()`方法**:`equals()`用于比较两个对象是否相等,是`Object`类...

    javabean规范.doc

    - **向下转型**(自动类型转换):从父类引用转换为子类对象,如从 Shape 转换为 Circle。 - **向上造型**(强制类型转换):从子类对象转换为父类引用,但需要注意转换前需确认对象的实际类型,否则可能会导致 ...

    JAVASE教程

    - **向下转型**:将父类引用强制转换为子类类型,以便调用子类特有成员。 - **方法重写**:子类覆盖父类的方法。 - **多态**:通过定义父类类型的引用,可以指向不同的子类实例。 - **抽象类**:包含抽象方法的类,...

    V20-Java笔记整理-重要概念和常见陷阱梳理.docx

    - **向下转型**:父类引用可以显式地转换为子类类型。 - **instanceof**:判断对象是否为某个类的实例。 **5.8 子类对父类属性的继承与隐藏** - 子类可以继承父类的属性,也可以声明与父类相同的属性名,此时子类...

Global site tag (gtag.js) - Google Analytics