java游离块的相关特点_super和this—游离块—Object类的方法—引用数据类型转换…...

super

在Java类中使用super来引用父类的成分,super关键字不能使用在静态成分中

(一)在构造方法中使用(实参)

①创建子类对象时,父类的构造方法一定会被调用,并且是父类构造方法先调用

②super(实参) ;这句代码必须定义在构造方法中且第1行

(二)调用父亲的属性

super. 属性名 先找父亲属性,若找到了则直接使用,若没有再找到父类的父类,以此类推,直到Object类

(三)调用父类的方法

super. 方法名(实参) ;

(四)super的追溯不仅于直接父类

this

在Java类中使用super来引用父类的成分,super关键字不能使用在静态成分中

(一) 在构造方法中使用 super(实参);

创建子类对象时,父类的构造方法一定会被调用,并且是父类构造方法先调用

super(实参); 这句代码必须定义在构造方法中且第1行。

(二)调用父类的属性

super.属性名 先找父类属性,若找到了则直接使用,若没有再找父类的父类,以此类推,直到 Object类

(三)调用父类的方法 super.方法名(实参);

(四)super的追溯不仅于直接父类

this

this关键字代表本类对象的引用,this关键字不能使用在静态成分中,在java类中每一个类都存在一个this对象,该this对象表示当前类的一个实例。 可以在类的内部通过this调用当前的重载的构造方法,属性,方法。

(一)this在非静态方法中使用

哪个对象调用了该方法,那么this代表调用这个方法的对象

(二)this什么时候存在的?

当创建了对象时候,this就存在了

(三)当成员变量和局部变量重名时,this区分

this的作用:用来区分同名的成员变量和成员方

(四)this出现在构造方法中

①this.属性名=参数名;

代表使用这个构造方法创建的对象

②this(实参);

必须出现在构造方法中且第1行,代表调用当前类重载构造方法

游离块

(一)语法

{

//java代码

}

(二)什么时候执行?

①不能直接调用游离块

②不管使用哪个构造方法创建对象,游离块先执行(多个游离块,则每个游离块都要执行,按照定义顺 序执行1遍),再执行构造方法

重写和重载的区别

***重写(override) ***

在某些情况下,父类中的方法不能够满足子类的需求时,此时子类可以对父类的方法进行覆盖,这个操作称为重写

要求:

①重写是发生在有继承关系的类中

②三同一不严格 (返回值类型一样,也可以是子类)

***重载(overload) ***

方法的重载:是多态的一种实现策略,方法的重载表现为

存在方法名相同,参数列表不同的方法。(和返回值类型,访问控制修饰符无关)

参数列表: 参数个数不同 或者 参数对应位置数据类型不同 !

30b76988a8a1ac29b5bbbaf2f65b2136.png

注意:

当子类重写父类的方法

① 观察两个类是否添加了extends关键字标明它们的继承关系

② 观察这个父类方法的访问控制修饰符,是否能够在子类中访问的到

== 和 equals 的区别

(一)==

情况1:基本数据类型,比较值

情况2:引用数据类型,比较地址 (更准确的讲,判断两个引用是否指向同一个对象)

(二)equals

情况1: 若没有重写Object类的equals方法,其实本质还是比较地址

Object源码中equals方法的定义:

public boolean equals(Object obj) {

return (this == obj);

}

情况2: 子类重写了Object类的equals方法,一定也要重写hashCode()方法,则按照重写后的规则比较

this 和 super 的区别

相同点:

都不能在static修饰的位置使用

不同点:

使用super来引用父类的成分

用this来引用当前类的成分

Object

(一)Object是所有类的父类

声明一个类的时候,没有指定它的父类,则默认继承Object类

public class Animal extends Object { }

(二)toString() 方法

Object类提供了一个方法 toString(),所有的类都有toString方法

作用:使用字符串表示对象

(三)getClass() 方法

作用:返回运行时类

(四)equals(Object obj)方法

用于判断两个对象是否相等

(五)如何重写equals方法

“请注意,无论何时覆盖equals方法,通常需要覆盖hashCode方法,以便维护hashCode方法的通用合

同,该方法规定相等的对象必须具有相等的哈希码。”

右键 —> source —> generate hashCode() and equals()

在弹出的窗体中,选中按照什么属性比较

(六)== 运算符

情况1:

基本数据类型比较值

int a = 100;

int b = 100;

a == b // true

情况2:

引用数据类型比较地址

Hero h1 = new Hero();

Hero h2 = new Hero();

h1 == h2// false (判断两个引用是否指向同一个对象)

(七)finalize()方法

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

当它被垃圾回收器回收的时候,会自动调用finalize()方法

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

(八)clone() 方法

protected native Object clone() throws CloneNotSupportedException;

只有实现了Cloneable接口的类的对象才可以调用这个方法

这个方法会生成一个新的对象

instanceof

使用规则:

boolean 变量名 = obj instanceof 类型(和obj有继承关系的类);

含义: 判断 obj 是否属于指定的类型, true √ false ×

instanceof会判断继承关系,子对象 instanceof 父类 会返回true,父对象 instanceof 子类 会返回 false

可以理解为判断两个问题:“你是这个类吗?” “你是这个类的派生类吗?”

getClass()判断两个对象的类型

// getClass返回的是一个类名,也就是说只会在类名相同时返回true

// 不会判断子类与父类的继承关系System.out.println(obj1.getClass() == obj2.getClass());

引用数据类型转换

明确引用数据类型与对象类型的概念

首先,必须知道哪个是引用类型和哪个是对象类型

Hero h = new Hero();

有一个对象 new Hero() ,有一个引用 h

引用类型 ----> Hero

1、子类转父类(向上转型)

Son s = new Son() ;

Father f = s;

2、父类转子类(向下转型)

向下转型的对象,必须使用instanceof关键字判断是否可以向下转

Father f = new Son();

if(f instanceof Son){

Son s = (Son)f;

}

三种区别

Son s = new Son() ;

①自己定义的方法

②从父类中继承过来的方法

③存在重写,则调用重写后的方法

Father f = new Father() ;

只能调用自己定义的方法

Father f = new Son() ;

①父类中自己的方法

②若子类重写了父类方法,则调用重写后的

重写equals时总是要重写hashCode方法

①如果两个对象equals相等,那么这两个对象的hashCode一定也相同

②如果两个对象的hashCode值相同,并不代表这两个对象相等,只能说明这两个对象在hash表结构中,存放在同个单链表中

一个标准的类

public class 类名{

//属性(private)

//构造方法 (一般会提供2个,无参|有参)

//get和set方法

//重写Object类的toString()方法

}

本文地址:https://blog.csdn.net/qq_49143649/article/details/107349577

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值