07继承

继承

面向对象特点:继承、封装、多态、抽象

对象与对象(类)之间存在哪些关系
1.关联关系:最弱的一种关系(学生类中的老师)
2.继承关系:比较强的一种关系,能够用什么是什么来描述并符合逻辑的就是继承关系
3.聚合关系:比较强的一种关系,聚集和组合,能够用什么是什么的一部分来描述
4.实现关系:子类要去实现父接口
格式:
class 父类 {

}

class 子类 extends 父类 {
	
}

java中继承的特性
1.子类继承父类,子类可以拥有父类的所有非私有属性和非私有方法。访问修饰符范围,private只能用于本类,public所有类都可以用
2.子类可以拥有自己的属性和方法,对父类进行扩展
3.子类也可以实现父类的方法
4.java的继承是单继承、一个类只能有一个父类,一个类可以多重继承

缺点:
提高了类与类之间的耦合性,代码之间的联系非常机密,代码的独立性差,以后的替换和修改不容易

构造器
特点:没有返回值,方法名和类名一样,也称为构造函数

作用:
1.只要创建对象采用的new关键字,首先执行的就是构造器,构造器创建对象。如果没写构造器,编译器会自动给每个类创建无参构造器	
2.初始化属性,使用对象的时候可以直接获取到初始化的值
# 如果写了有参构造,编译器不会自动添加无参构造,要手动添加无参构造器 #

public T01_Rabbit(int id,String name,String color){
	//初始化属性
	this.id = id;
	this.name = name;
	this.color = color;
}//先在类中创建有参数的构造函数,使用时要传参,不然没有值
使用有参数的构造函数创建对象:直接new构造函数,并将具体的参数传入
T01_Rabbit rabbit3 = new T01_Rabbit(2,"小白兔","灰色");
# 创建对象时,先创建父类,在创建子类 #

object对象
object类是所有类的根类,如果没有extends去继承类,默认继承object类

创建的任何一个对象都可以使用object提供的方法,object提供了所有类公用的各种方法

Object类重要的方法:
toString():alt+shift+s gener toString 父类的toString方法就将内存地址转化为类名+hashcode码,重写toString 优先调用子类的toString
java默认规定,如果你输出的对象的变量,默认调用toString,将内存地址转化为字符串输出
java输出内容的时候 输出变量.属性 变量.行为 默认不会执行toString

作用:调用重写的toString方法输出对象的全部内容
@Override
public String toString() {
	return "ATM [userName=" + userName + ", password=" + password
			+ ", money=" + money + ", index=" + index + "]";
}

equals() ==比较的是内存地址 对象的equals也比较的内存地址,不过equals能够被重写, String中的equals经过重写

hashcode equals和hashcode方法都是java来设计判断两个对象是否相等的方法,但equals在比较的时候,是比较的对象的所有属性是否相等,只有属性全部相等,两个对象才相等,效率比较低
hashcode方法用hash值进行比较(hash算法),效率非常高

区别:
hashcode不完全可靠,有时候不同对象生成的hashcode一样
特点:
1.equals相等的两个对象对应的hashcode值一定相等,equals进行判断是可靠的
2.hashcode相等的对象,使用equals进行比较并不一定相等,所以hashcode不完全可靠
(hash冲突)
注意:String new的对象equals不等,hashcode的值也不同,内存地址不同。

# hashcode和equals的配合使用:
对于大量和快速的对比,如果全部使用equals效率比较低;
解决方案:联合使用hashcode和equals,先用hashcode看值是否相等,如果值不等,没必要继续比较,如果相等,调用equals再进比较
public boolean equals(Object obj) {
	Cat c=null;
	if(obj!=null){
		c = (Cat) obj;
		if(this.hashCode()==c.hashCode()){
			if(this==obj){
				return true;
			}
			//先将Obj对象转化为 Cat对象
			
			//判断两个对象所有的属性相等 那才表示两个对象是相同的
			if(this.id==c.id && this.name==c.name){
				return true;
			}
		}else{
			return false;
		}
	}
	
	return false;
	
}

值传递
值传递:将值传递给方法然后计算,不影响之前的值,传递的值的一个副本
引用传递:传递对象本身
在java中只有值传递(当传递对象时,传递的是地址,而不是对象本身)
super
java中有几种表现形式:
1、super.属性 super.方法() 用来调用父类的方法和属性
2、super(参数)
在java类中,使用super关键字来表示引用父类的属性和方法,或者调用父类的构造器,this代表当前对象,super表示父类对象

执行的顺序:
1.子类对象 先执行 子类的无参构造,在执行无参构造的时候发现当前类有父类的属性和方法:super.属性 super.方法()优先使用
2.默认调用父类的无参构造,super(参数) 表示自己指定要调用父类那个有参构造
3.回到子类继续执行子类构造

final
final修饰变量,变量的值不能修改,变量变成常量
final可以修饰类,表示当前类是最终类,当前类不能再做修改或者扩展,不能被任何子类继承
final修饰方法,表示该方法不等被重写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值