有书共读】java核心技术卷1--第5章

================java核心技术卷1第5章-------继承========
1 类,超类和子类
2 Object
3 泛型数组列表
4 包装器和自动装箱
5 参数可变方法
6 枚举类
7 反射
8 继承设计技巧
==================================================
1 类,子类与超类
1.1  如果我们定义一个类,并使用extends表面这个新类派生于一个已经存在的类,
那么已经存在的这个类即为超类,也叫基类或父类;要定义的这个新类为子类

1.2 覆盖方法:当超类中的方法对子类不一定适用时,需要在子类重新定义这个方法,及重写该方法
java中使用super.方法名 即可调用父类中的方法,C++中调用方式为:父类名::方法名

1.3 子类构造器:在子类中可以使用super调用超类的构造器,如子类没有显示的调用,则自动调用超类默认的构造器。
如果超类没有不带参数的构造器,且子类的构造器没有显示的调用其他构造器,则编译器或报错。
子类调用suoper构造器的语句必须实在子类构造器的第一条语句

1.4 继承与多态:由一个公共超类派生出来的集合被称为继承层次,Java不支持多继承,但是可以通过接口来实现
一个类只能继承一个类,但是可以实现多个接口
java中的多态形式:重载和重写;
重载:方法名一致,参数个数不同或者参数类型不同,返回类型可以不一致,可在一个类或继承中使用
重写:方法名一致,参数列表,返回类型都要求一致,只是具体实现不同,只能在继承类中
抽象类:用Abstract关键字修饰,类中的方法只声明,不实现,具体实现由子类实现;功能对应C++中的纯虚函数
instanceof :判断两个对象是否属于同一类型
2 Object
Java中有一句经典的话:万物皆对象,Java中所有的类都是由Object扩展而来,如果一个类没有明确指定它的父类,
那么Object就是它的父类或者父类的父类,或者父类的父类的...的父类

2.1 equals:用于检测一个对象是否与另一个对象相等
hashCode:生成每个对象的散列码

3 泛型数组列表
3.1 C++在设计数组的时候是在编译阶段确定数组大小的,一旦确定大小,更改就不那么容易了
而Java可以使用ArrayList自动调节数组容量大小,ArrayList是采用类型参数的泛型类,使用方法如:
ArrayList<ObjectType> array=new ArrayList<>();
List<ObjectType> array=new ArrayList<>();
3.2 在ArrayList中,添加元素用add,而set方法只能修改已经存在的元素值,
在ArrayList添加元素完毕后,通过toArray方法将数组中的元素拷贝到一个数组中,可以更方便访问数组元素

4 自动拆箱装箱
我们都知道,在Java中,万物皆对象。一个基本的数据类型,如int,都会有一个与之对应的类(Integer),
通常将这些类成为包装器。常见的包装器类有:
Integer,Long,Float,Double,Short,Byte,Character,Void,Boolean
如定义一个整形的List,尖括号内的数据类型事不允许出现基本类型的,而要使用包装类型:
List<Integer> list=new ArrayList<>();

5 参数可变方法
现在的Java版本可以提供可变参数数量调用的方法,如printf
用户也可以自己定义可变参数的方法,并将参数指定任意类型
6 枚举类
声明定义一个类,类里面是定义的实体。枚举类可以又构造器,方法,域;构造器只有在构造枚举常量的时候使用

7 反射
7.1 能够用来分析类的程序成为反射,反射机制可以:
运行时分析类的能力
运行时查看对象
在通用的数组操作代码
利用method对象
class类:
程序运行期间,Java运行时始终为所有的对象维护一个被称为运行时的类型标识,这个信息跟踪着每个对象所属的类,
虚拟机利用运行时的类型信息选择相应的方法执行。也可以通过专门的Java类访问这些信息,保存这些信息的类成为class
Oject 的getClass()方***返回一个Class类型的实例,用getName()可以获取类的名字
7.2 捕获异常
当程序运行时发生错误时,就会抛出异常,如果没有提供捕获异常的处理器,程序就会终止
异常用两种类型:未检查异常和已检查异常,对于已检查异常,编译器会检查是否提供了处理器;
对于未检查异常,编译器不会查看是否未这些错误提供了处理器,捕获异常 常用的形式
try{
statements...

}catch(Exception e){
handler action
}
7.3 反射能力
检查类的机构:java reflect 类中包含3个类,Field,Method,Constructor分别用于描述类的域,方法,和构造器
三各类都有getName()方法,用于返回项目的名称
7.4 使用反射编写泛型数组代码:Java.lang.reflect包中的Array类运行动态创建数组

8 继承设计技巧
将公共类操作和域放在父类
不要使用收保护的域
使用继承实现"is-a"关系
除非所有继承的方法都有意义,否则不使用继承
在覆盖方法时,不要改变预期的行为
使用多态,而非类型信息
不要过多使用反射

全部评论

相关推荐

01-28 16:12
中南大学 Java
几年前还没有chatgpt的时候,刷题真的是很痛苦。刷不出来只能看题解,题解有几个问题:第一个是每次看的写题解的人都不一样,很难有一个统一的思路;第二个也是最重要的是,题解只提供了作者自己的思路,但是没有办法告诉你你的思路哪里错了。其实很少有错误的思路,我只是需要被引导到正确的思路上面去。所以传统题解学习起来非常困难,每次做不出来难受,找题解更难受。但是现在chatgpt能做很多!它可以这样帮助你&nbsp;-1.&nbsp;可以直接按照你喜欢的语言生成各种解法的题解和分析复杂度。2.&nbsp;把题和你写的代码都发给它,它可以告诉你&nbsp;你的思路到底哪里有问题。有时候我发现我和题解非常接近,只是有一点点🤏想错了。只要改这一点点就是最优解。信心倍增。3.&nbsp;如果遇到不懂的题解可以一行一行询问为什么要这样写,chatgpt不会嫌你烦。有时候我觉得自己的range写错了,其实那样写也没错,只是chat老师的题解有一点优化,这个它都会讲清楚。4.&nbsp;它可以帮你找可以用同类型解法来做的题。然后它可以保持解法思路不变,用一个思路爽刷一个类型的题。如果题目之间思路又有变化,它会告诉你只有哪里变了,其他的地方还是老思路。5.&nbsp;它也可以直接帮你总结模板,易错点。经过chat老师的指导,我最大的改变是敢刷题了。之前刷题需要先找某一个人写的算法题repo,然后跟着某一个人他的思路刷他给的几个题。如果想写别的题,套用思路失败了,没有他的题解,也不知道到底哪里错了;看别人的题解,思路又乱了。这个问题在二分查找和dp类型的题里面特别常见。但是现在有chat老师,他会针对我的代码告诉我我哪里想错了,应该怎么做;还按照我写代码的习惯帮我总结了一套属于我的刷题模板。每天写题全是正反馈!
明天不下雨了:那我建议可以用 chatgpt atlas 或者 dia 去刷,也可以用 chrome 加个 ai 插件去刷 左边刷题右边 chat 效果很好
AI时代的工作 VS 传...
点赞 评论 收藏
分享
2025-12-31 14:19
门头沟学院 产品经理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务