重写Override super() object类等

Override:

在子类中,可以根据需要对从基类中继承来的方法进行重写

重写方法必须和被重写方法具有相同的方法名称、参数列表、和返回类型

重写方法不能使用比被重写方法更更严格的访问权限

例子:

public class Animal {

private Stringname;

public void shout(){

  System.out.println("动物会叫..");

}


public class Dog extends Animal{

@Override

public void shout() {

  System.out.println("汪汪。。汪汪。。。");

}

}


Super:是直接父类对象的引用可以通过super访问父类汇中被子类覆盖的方法或属性

 普通方法:没有顺序,任意调用

 构造方法:任何类的构造方法中,如果构造方法中没有显示的调用super(…),那么Java会默认调super()作为父类的初始化方法,所以在写不写super()方法,没有关系。


Object类:是所有Java类的祖先。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的方法

1.Java只支持 单继承
2.Object类是所有 java类的根基类
3.类未声明extends父类,默认为Object
4.可以使用类型为Object的变量指向任意类型的对象


Object类: getClass()方法

1)在构造方法中获取当前实例化的对象类型

2)获取引用数据类型,所指向的对象实例的类型


hashCode()方法:

对象实例化后hash码固定,不会因对象属性改变而改变。

再次执行程序,hash码不要求和之前一致。

如equals方法返回true,hash码也应一致。

开发者应尽量做到为不是equals的对象,产生不同hash码。

出于实际运用的角度,java将对象实例的内存地址转为整型。

equals()方法:

指出其他对象是否和当前对象相等。

对于非空引用 x 的相等运算,满足以下特性:

u自反性 

  对于任何非空引用值x, x.equals(x) 会返回true.

u对称性

  对于任何非空引用值 x和y, x.equals(y) 会返回true当且仅当 y.equals(x)返回true.

u传递性

  对于任何非空引用值 x, y,和z, 如果x.equals(y)返回true 且y.equals(z)返回true, 则x.equals(z)会返回true

u一致性

  对于任何非空引用值 x 和y, 在对象引用值没有修改的前提下多次调用会一致的返回ture或false.

u对于任何非空引用值x, x.equals(null)会返回false

因为在 java.lang.Object的实现代码中,默认比较内存地址

所以,对于以下代码,使用 == equals方法,结果都一直,都是false


两个对象实例的内存地址不同

操作符== 和对象的equals()方法:

n “== ”操作符用来比较两个操作对象是否相等
p基本类型的数据: 比较两个数值是否相等
p引用类型的数据: 比较两个地址是否相等
nequals()方法用来比较两个非空引用值是否等价
p自反性 : 对于任何非空引用值x, x.equals(x) 会返回true.
p对称性 : 对于任何非空引用值 x和y, x.equals(y) 会返回true当且仅当y.equals(x)返回true.
p传递性 : 对于任何非空引用值 x, y,和z, 如果x.equals(y)返回true 且y.equals(z)返回true, 则x.equals(z)会返回true.
p一致性 : 对于任何非空引用值 x 和y, 在对象引用值没有修改的前提下多次调用会一致的返回ture或false.
p对于任何非空引用值x, x.equals(null)会返回false. 

根据需求重写equals方法,可以判断对象实例在逻辑上(非内存地址)是否相等







s1s2两个字符串,地址不同,

equals 比较相等返回true


说一下”==“和”equals”之间的区别?

      1、如果比较的是基本数据类型,使用==进行比较,比较的是值

      2、如果比较的是引用类型,”==”比较的是引用的内存地址,

equals本身是要比较的对象值,但是object类中Equals方法的实现是比较的地址,所以如果要比较引用的值是否相等,此时要重写equals方法事实上进行比较对象      


1.使用IDE提供的功能自动产生,避免手写引起的错误.
2.遵守规范:Override equals()方法,必须也Override  HashCode方法.
3.如果子类没有特有属性,直接Override 父类equals()方法即可.
4.如果子类含有特有属性,且父类中有公用属性,则需在子类和父类中都Override  equals()方法.
    

toString()方法:

所有类都会直接或者间接继承于Object类,都会拥有toString()方法。

而Object类中的toString()方法只是返回类的全限定名和内存地址码。

可以重写toString()方法,来实现自己需要的打印信息。


浅克隆(shallow copy)

  Employee cindy=tobby.clone()

深克隆(deep copy)   必须实现Cloneable接口

  class Employee implements Cloneable    {         

   public Object clone() throws CloneNotSupportedExceptio{                              

                                     Employee cloned = (Employee) super.clone();       

     cloned.hireDay = (Date) hireDay.clone()      

      return cloned;        

   }

  }  

如果对象中有引用类型,就必须使用深度克隆,就是在克隆时,要把对象中的引用类型对象,也要进行克隆。


finalize()方法:定义回收当前对象时需要完成的清理工作

System类是java中的常用类,主要功能:

1.获得系统的标准输入和输出
2.获取系统的资源
3.获取属性和环境变量
4.复制数组
5.垃圾回收

currentTimeMillis()方法,静态方法:返回从1970年1月1日至今的毫秒时间数。


实现无用内存的回收功能,gc()方法强制JVM进行垃圾回收工作,使无用的内存能够获得释放。


退出:强制JVM退出运行状态,并返回状态信息。


对象转型:

Ø一个基类的引用类型变量可以“指向”其子类的对象。
Ø一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
Ø可以使用 引用变量 instanceof 类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
Ø子类的对象可以当做基类的对象来使用称作向上转型(upcasting),反之成为向下转型(downcasting)





猜你喜欢

转载自blog.csdn.net/qq_15007327/article/details/76271012