首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 中文官方教程 2022 版(四)

您可以在这里阅读更多关于接口信息——它们作用是什么,为什么您可能想要编写一个,以及如何编写一个。 继承 这一部分描述了如何一个派生另一个。也就是说,子类如何继承字段和方法。...你可以在子类声明一个中相同名称字段,从而隐藏它(不建议)。 你可以在子类声明中没有的新字段。 继承方法可以直接使用。...因此,一个子类继承公共或受保护嵌套间接访问了所有私有成员。 对象转型 我们已经看到,一个对象数据类型是它实例化数据类型。...当您通过实例化该类创建对象时,对象将从所有继承字段。如果不同方法或构造函数实例化相同字段会怎样?哪个方法或构造函数将优先?由于接口不包含字段,您不必担心由于状态多重继承而导致问题。...这意味着如果一个变量声明为接口类型,那么它值可以引用任何实例化自实现接口任何对象。这在将接口用作类型一节中讨论。

14300

Java之Java关键字及其作用

表明要访问指定或包 instanceof 用来测试一个对象是否是指定类型实例对象 int 基本数据类型之一,整数类型 interface 接口 long 基本数据类型之一,长整数类型 native...只能在声明 private(内部)、方法或字段中引用这些、方法或字段。在外部或者对于子类而言,它们是不可见。...可以在声明 protected 、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段。...如果abstract子类没有实现其所有abstract方法,子类也是abstract。...protected、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段

66210
您找到你想要的搜索结果了吗?
是的
没有找到

Scala专题系列(六) : Scala特质

在 Java 中,可以实现任意数量接口。这种模型非常适用于声明实现了多个抽象。不过,这类模型也存在一个明显缺点。对于一些接口而言,使用接口所有使用了样板代码实现接口大量功能。...= new Date() } 混入特质自动获得一个time字段,在特质中每个具体字段,使用特质得会获得一个字段与之对应,这些字段不能够被继承,它们只是简单被加到了子类当中....,SavingAccount对象由所有字段,以及任何子类中定义字段构成....log方法用来记录异常消息,同时,log方法调用了Exception继承下来getMessage()方法 接下来,在来声明一个来混入特质得UnHappyException class UnHappyException...如果特质扩展自某个,则伴生并不继承这个,会被任何实现特质继承

66920

【收藏篇】Java关键字 及其 更详细介绍

final用来说明最终属性,表明一个不能派生出子类,或者成员方法不能被覆盖,或者成员域值不能被改变finally用于处理异常情况,用来声明一个基本肯定会被执行到语句块float基本数据类型之一,单精度浮点数类型...只能在声明 private(内部)、方法或字段中引用这些、方法或字段。在外部或者对于子类而言,它们是不可见。...可以在声明 protected 、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段。...如果abstract子类没有实现其所有abstract方法,子类也是abstract。...protected、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段

65020

对象序列化与反序列化

要允许不可序列化子类型序列化,可以假定子类型负责保存和恢复类型公用 (public)、受保护 (protected) 和(如果访问)包 (package) 字段状态。...仅在子类型扩展一个访问无参数构造方法来初始化该类状态时,才可以假定子类型有此职责。如果不是这种情况,则声明一个序列化是错误错误将在运行时检测到。...在反序列化过程中,将使用该类公用或受保护无参数构造方法初始化不可序列化字段序列化子类必须能够访问无参数构造方法。序列化子类字段将从流中恢复。...通过调用 out.defaultWriteObject 可以调用保存 Object 字段默认机制。方法本身不需要涉及属于其子类状态。...defaultReadObject 方法使用流中信息来分配流中通过当前对象中相应指定字段保存对象字段。这用于处理演化后需要添加新字段情形。方法本身不需要涉及属于其子类状态。

1K150

重构-改善既有代码设计:重新组织数据16种方法(六)

如果你想访问一个字段,却又想子类中将对这个变量访问改为一个计算后值,这就是使用Self Encapsulate Field (自封装字段时候。“字段自我封装”只是第一步。...面向对象首要原则之一就是封装,或者称为“数据隐藏”。按此原则,你绝不应该将数据声明为public,否则其他对象就有可能访问甚至修改这项数据,而拥有数据对象却毫无察觉。...但为了那个顺利进行那样重构,首先应该将类型码替换为拥有多态行为继承体系。这样一个继承体系应该以类型码宿主为基,并针对每一种类型码建立一个子类。...这东西有其用途:你可以让不同子类一个访问函数返回不同值。你可以在中将访问函数声明为抽象函数,并在不同子类中让它返回不同值。...尽管常量函数有其用途,但若与子类中只有常量函数,实在没有足够存在价值。你可以在中设计一个与常量函数返回值相应字段,从而完全除去这样子类。如此一来就可以避免因继承而带来额外复杂性。

55120

JAVA关键字及作用

只能在声明 private(内部)、方法或字段中引用这些、方法或字段。在外部或者对于子类而言,它们是不可见。...可以在声明 protected 、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段。...byte 存储在 [-128, 127] 范围以内整数值。    Byte 是 byte 原始类型包装对象。...变量引用   1) super 父,   super 关键字用于引用使用关键字。    作为独立语句出现 super 表示调用构造方法。    super....() 表示调用方法。只有在如下情况中才需要采用这种用法:要调用在该类中被重写方法,以便指定应当调用在方法。

61200

【Java学习笔记之一】java关键字及作用

只能在声明 private(内部)、方法或字段中引用这些、方法或字段。在外部或者对于子类而言,它们是不可见。 ...可以在声明 protected 、方法或字段、同一个包中其他任何以及任何子类(无论子类是在哪个包中声明)中引用这些、方法或字段。...子类继承父所有 public 和 protected 变量和方法。 子类可以重写父任何非 final 方法。一个只能扩展一个其他。...变量引用 1) super 父, super 关键字用于引用使用关键字。  作为独立语句出现 super 表示调用构造方法。  super....() 表示调用方法。只有在如下情况中才需要采用这种用法:要调用在该类中被重写方法,以便指定应当调用在方法。

99681

Java最佳实践和建议:设计模式

这类问题完美示例是工厂设计模式,它是一种创造性设计模式,无需指定对象的确切类别即可提供对象创建。它建议使用从继承和多个子类。在执行期间,仅使用,其值因工厂而异。...上面的java指定了一个(Car.java)和两个子类(Truck.java和Jeep.java)。...singleton单例模式 这个设计模式是最有名和有争议造物设计模式之一。单例一个,它将在应用程序生命周期中仅实例化一次,即只有一个对象共享所有资源。...构建器本身具有相同字段,并且必须将其声明为静态才能访问,而无需实例化持有者对象(在本例中为Example.java)。...6或7,则代码更加整洁和重用; 在设置所有需要字段之后创建对象,并且只有完全创建对象可用; 构建器模式隐藏构建器一些复杂计算,并将其与应用程序流分离; 缺点: 构建器必须包含原始所有字段

68250

java.io.Serializable浅析

未实现次接口无法使其任何状态序列化或反序列化。序列化所有子类型本身都是序列化。序列化接口没有方法或字段,仅用于标识序列化语义。   ...通过调用 out.defaultWriteObject 可以调用保存 Object 字段默认机制。方法本身不需要涉及属于其子类状态。...defaultReadObject()方法使用流中信息来分配流中通过当前对象中相应命名字段保存对象字段。这用于处理发展后需要添加新字段情形。方法本身不需要涉及属于其子类状态。...serialVersionUID   序列化运行时使用一个称为 serialVersionUID 版本号与每个序列化相关联,序列号在反序列化过程中用于验证序列化对象发送者和接收者是否为对象加载了与序列化兼容...序列化可以通过声明名为 "serialVersionUID" 字段字段必须是静态 (static)、最终 (final) long型字段)显式声明其自己 serialVersionUID

44420

「JAVA」面向对象三大特征:封装、继承、多态,以高内聚、低耦合为目标

方法签名= 方法名 + 方法参数列表,参数类型、参数个数、参数顺序都必须一致 两小: 子类方法返回值类型和父方法返回类型相同或者是其子类子类可以返回一个更加具体子类子类方法声明抛出异常类型和父方法声明抛出异常类型相同或者是其子类...,子类方法中声明抛出异常小于或等于父方法声明抛出异常类型;子类方法可以同时声明抛出多个属于父方法声明抛出异常子类(RuntimeException类型除外,RuntimeException是个特例...this主要存在于两个位置: 构造器中:就表示当前正在创建对象 方法中:表示方法调用者对象一个对象创建之后,JVM会为对象分配一个引用对象自身引用:this。...继承中隐藏 上文中提到了隐藏概念,继承中隐藏表示会忽略一些特征和方法,比如静态字段和静态方法: 满足继承访问权限下,隐藏父静态方法:若子类定义静态方法签名和静态方法签名相同,那么此时就是隐藏父方法...类型形态 多态可以是之间继承关系,也可以是接口和实现实现关系,一般情况下指都是接口和实现实现关系。

1K40

开发中滥用面向对象,你是否违背了编程原则

Switch 声明 Switch 声明(Switch Statements) 你有一个复杂 switch 语句或 if 序列语句。 ?...如果你选择条件之一是 null,可以运用 引入 Null 对象(Introduce Null Object) 。 收益 提升代码组织性。 ?...你期望查看对象字段数据,但是出于某种原因,它们总是为空。 解决方法 可以通过 提炼(Extract Class) 将临时字段和操作它们所有代码提炼到一个单独中。...如果继承是适当,则去除子类中不需要字段和方法。运用 提炼(Extract Superclass) 将所有中对于子类有用字段和函数提取出来,置入一个中,然后让两个都继承自它。...解决 在子类中新建一个字段用以保存; 调整子类函数,令它改而委托; 然后去掉两者之间继承关系。 ? 提炼(Extract Superclass) 问题 两个有相似特性。 ?

80540

关于重构总结

以状态取代类型码 有一个不可变类型码,且会影响到行为,但无法用继承手法消除时 以字段取代子类 修改这些函数,使他们返回某个字段,然后销毁子类 当各个子类唯一差别只在“返回数据常量”函数身上时...移除设值函数 去掉字段所有设值函数 中某个字段应该在对象创建时被设值,然后不再改变 隐藏函数 将这个函数设置为private 有一个函数,从来没有被其他任何用到 以工厂函数取代构造函数 将构造函数替换为工厂函数...某个函数只与部分子类有关 字段下移 将字段移到需要它那些子类中去 某个字段只被部分子类用到 提炼子类 新建一个子类,将上面所说那一部分特性移到子类中去 某些特性只被某些实例用到...提炼 为相似的建议一个,将相同特性移至 一些有相似的特性时 提炼接口 将相同子集提炼到一个独立接口中 一些具有相同行为时 折叠继承体系 将子类合为一体 子类无太大区别时...在子类新建一个字段用以保存,调整子类函数,改为委托,然后去掉两者之间继承关系 某个子类只使用了接口中一部分,或是根本不需要继承而来数据时 以继承取代委托 让委托继承受托 两个之间存在委托关系

97010

狗屎一样代码!快,重构我!

以是系统中更简单 2、搬移字段 程序中,某个字段被其所驻之外一个更多用到。在目标新建一个字段,修改原字段所有用户,令他们改用新字段 3、提炼 某个做了应该由两个事。...9、引入参数对象 某些参数总是很自然同时出现。以一个对象取代这些参数。 10、移除设值函数 中某个字段对象创建时被设值,然后不再改变。去掉字段所有设值函数。...(八)处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...将函数移到相关子类中。 5、字段下移 某个字段只被部分(而非全部)子类用到。 将字段移到需要它子类中。 6、提炼子类 某些特性只被某些(而非全部)实例用到。...子类新建字段保存,调整子类函数为委托,取消继承关系。 12、以继承取代委托 你在两个中使用委托关系,并经常为整个接口编写许多极简单委托函数。`让委托继承受托

1.1K40

如何重构代码?

以是系统中更简单 2.搬移字段 程序中,某个字段被其所驻之外一个更多用到。在目标新建一个字段,修改原字段所有用户,令他们改用新字段。 3、提炼 某个做了应该由两个事。...9.引入参数对象 某些参数总是很自然同时出现。以一个对象取代这些参数。 10.移除设值函数 中某个字段对象创建时被设值,然后不再改变。去掉字段所有设值函数。...八.处理概括关系 1.字段上移 两个子类拥有相同字段。将该字段移至。 2.函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...将函数移到相关子类中。 5.字段下移 某个字段只被部分(而非全部)子类用到。将字段移到需要它子类中。 6.提炼子类 某些特性只被某些(而非全部)实例用到。...子类新建字段保存,调整子类函数为委托,取消继承关系。 12.以继承取代委托 你在两个中使用委托关系,并经常为整个接口编写许多极简单委托函数。让委托继承受托

1.7K30

狗屎一样代码!快,重构我!

以是系统中更简单 2、搬移字段 程序中,某个字段被其所驻之外一个更多用到。在目标新建一个字段,修改原字段所有用户,令他们改用新字段 3、提炼 某个做了应该由两个事。...9、引入参数对象 某些参数总是很自然同时出现。以一个对象取代这些参数。 10、移除设值函数 中某个字段对象创建时被设值,然后不再改变。去掉字段所有设值函数。...(八)处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...将函数移到相关子类中。 5、字段下移 某个字段只被部分(而非全部)子类用到。 将字段移到需要它子类中。 6、提炼子类 某些特性只被某些(而非全部)实例用到。...子类新建字段保存,调整子类函数为委托,取消继承关系。 12、以继承取代委托 你在两个中使用委托关系,并经常为整个接口编写许多极简单委托函数。`让委托继承受托

77330

Java复习3-继承

继承 子类 public class Manager extends Employee{ //... } 关键字extends表明正在构造派生于一个已存在。...多态可以用关系is-a来描述,表明程序中出现任何地方都可以用子类对象置换。 理解方法调用 假设要调用x.f(args), 隐式参数x声明C一个对象。...我们将方法声明为final主要目的是:确保他们不会在子类中改变语义。 强制转换 只能在继承层次内进行类型转换。 在将转换成子类之前,应该使用instanceof进行检查。...虚拟机为每个类型管理一个Class对象。所以,只有是这个Class对象,都是同一个如何获得这个Class呢?...这三个都有一个getName方法,返回名称。 Field有个getType方法,返回描述字段所属Class对象

61220

狗屎一样代码!快,重构我!

以是系统中更简单 2、搬移字段 程序中,某个字段被其所驻之外一个更多用到。在目标新建一个字段,修改原字段所有用户,令他们改用新字段 3、提炼 某个做了应该由两个事。...9、引入参数对象 某些参数总是很自然同时出现。以一个对象取代这些参数。 10、移除设值函数 中某个字段对象创建时被设值,然后不再改变。去掉字段所有设值函数。...(八)处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...将函数移到相关子类中。 5、字段下移 某个字段只被部分(而非全部)子类用到。 将字段移到需要它子类中。 6、提炼子类 某些特性只被某些(而非全部)实例用到。...子类新建字段保存,调整子类函数为委托,取消继承关系。 12、以继承取代委托 你在两个中使用委托关系,并经常为整个接口编写许多极简单委托函数。让委托继承受托

73730

这代码写太烂了!你以为我真想写“垃圾代码”吗?

以是系统中更简单 2、搬移字段 程序中,某个字段被其所驻之外一个更多用到。在目标新建一个字段,修改原字段所有用户,令他们改用新字段 3、提炼 某个做了应该由两个事。...9、引入参数对象 某些参数总是很自然同时出现。以一个对象取代这些参数。 10、移除设值函数 中某个字段对象创建时被设值,然后不再改变。去掉字段所有设值函数。...八、处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...将函数移到相关子类中。 5、字段下移 某个字段只被部分(而非全部)子类用到。将字段移到需要它子类中。 6、提炼子类 某些特性只被某些(而非全部)实例用到。...新建一个子类,将上述部分特性移到子类中。 7、提炼 两个有相似特性。为这两个建立一个,将相同特性移至。 8、提炼接口 若干客户使用接口中同一子集,或两个接口有部分相同。

94730
领券