Java----继承

本文详细介绍了Java中的继承概念,包括is-a关系、覆盖方法、强制类型转换及其注意事项。此外,还讨论了final关键字在防止子类继承中的作用,以及方法调用的过程,特别是重载解析和静态绑定与动态绑定的区别。同时,提到了抽象类的定义及使用,以及Object类作为所有类的父类的重要性。最后,讲解了hashCode方法在对象散列码生成中的应用,并列举了Java中的访问控制修饰符。
摘要由CSDN通过智能技术生成

 基本定义:继承是一种is-a的关系,比如上一篇中提到的Employee类(员工类)和Manager类(经理类),实际上经理也是属于员工,但是,待遇跟普通员工不一样,就可以把Employee类当做父类(或者称为超类、基类),而把Manager看做是子类。用关键字extends表示继承。

覆盖方法:当父类有些方法在子类中不适用是,子类中可以写一个新的方法覆盖父类的方法。例如,员工的总工资就是当月工资(在父类中的getSalary方法),而经理的工资是当月工资加奖金,这时候,我们可以在Manager类中改写getSalary方法。

强制性类型转换:不单单是基本类型之间可以强制性装换,也可以将一个对象引用强制性转换为另一个对象引用。在Java中,每个对象变量都属于一个类型。一般,在转换之前我们要检查是否可以进行强制性转换。

注意:在Java中,子类数组的引用可以转化为父类数组的引用,不需要采用强制性转化,而父类转化为子类需要强制性转化。就拿Employee类与Manager类来说,不是所有的员工都是经理。因此,

1、只能在继承层次内进行类型转换。 

2、将父类转化为子类之前,应该使用instanceof进行检查。

假如想要阻止人们定义某个类的子类,这时候就可以在定义这个类的时候使用final修饰符。对于final来说,在构造对象之后,就不允许改变它们的值了。如果一个类被声明为final类,这个类中的所有方法也会默认为final,但,不包括域。

方法的调用:假设要调用某个类中的方法,

1、首先,编译器查看对象的声明类型和方法名。需要注意的是,在一个类中可能存在许多方法名相同的方法,假设方法名为f,这时候编译器会一一列举该类中方法名为f的方法,以及父类中方法名为f的方法。

2、接下来,编译器会查看调用这个方法时提供的参数,找到最匹配的方法,就选择这个方法,这个过程叫做重载解析。

3、如果是private方法、static方法、final方法或者构造器,那么编译器就可以准确地知道要调用哪个方法,这种调用称作静态绑定。

4、当程序运行并采用动态绑定时,虚拟机调用与该引用类型最匹配的那一个。

抽象类:例如,在一个学校里,有学生类和员工类(包括老师类),这两个类中存在共有的属性,比如姓名,这时就可以创建一个Person类,可以使用关键字abstract修饰。为提高程序的清晰度,包含一个或者多个抽象方法的类本身必须声明为抽象的。

注:1、一个类即使不含有抽象方法,也可以声明为抽象类。

2、抽象类不能被实例化。

3、在c++中,抽象类声明,有一种在尾部用=0标记。

Java中四种控制可见性的修饰符:

1、private-----仅对本类可见。

2、protected-----对本包和所有子类可见。

3、默认,不需要修饰符-----对本包可见。

4、public----对所有类可见。

Object类:Object类是所有类的父类,虽然没有用extend关键字,但是默认就是Object类的子类。因此,可以用Object类型的变量引用任何类型的变量。例如:Objectobj=new Employ();

注:1、在Java中,只有基本类型不是对象。

2、所有类型数组,不管是对象数组还是基本类型数组,都拓展了Object类。

3、在c++中,没有所有类的跟类,但是,每个类型都可以转换为void*指针。

hashcode方法:散列码(hash code)室友对象导出的整型值(可以为负数),没有规律。

1、字符串的散列码由内容导出。

2、两个相同的对象,放回的散列码相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值