美文网首页
类和接口

类和接口

作者: 李军_6eaa | 来源:发表于2018-01-07 11:25 被阅读0次
在类和接口中,讲讲你对封装的理解?
  • 一个组件的好坏,在于该组件在于其他组件交互时,隐藏其内部数据和其他实现细节的程度,封装的程度越高,该组件越好。
  • 一个好的组件,会隐藏它所有的实现细节,清晰地使API和实现隔离。
  • 组件之间的沟通,仅仅通过它们的API,而不会牵涉到内部的细节。
  • 合理使用 access control机制,包括public,protected,package-private,private
  • 对于类和接口:能package-private,就不要 public; 能private static nested class,就不要package-private;
  • 公有类的实例field不要是public
  • 一个类不应该有public static final array field,也不能有返回这个field的存取器
  • 合理利用java9的module system
  • 遵守拇指规则:使每个类或成员尽可能的inaccessible
对于top-level的类和接口,一共有哪些access levels?
  • 两种:package-private 和 public
对于成员(fields, methods, nested classes, nested interfaces),一共有哪些access levels?
  • 四种:private,package-private,protected,public
fields, methods, nested classes默认的access levels 是什么?
  • package-private
interface members默认的access levels 是什么?
  • public
怎么解决array field 的access levels 问题?
  • make the public array private and add a public immutable list
private static final Thing[] PRIVATE_VALUES = { ... };
public static final List<Thing> VALUES =
   Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
  • make the array private and add a public method that returns a copy of a private array
private static final Thing[] PRIVATE_VALUES = { ... };
public static final Thing[] values() {
    return PRIVATE_VALUES.clone();
} 
public classes 为什么不应该暴露mutable fields?
  • 破坏封装的好处
  • 应该把fields设为private,然后提供公有的 get, set 方法
  • 如果一个类是package-private或者private nested class,则可以暴露其fields
immutable class的好处和缺点?
  • 相对于mutable classes,更容易 design, implement, 以及 use
  • 不易于产生error,更加安全
  • Immutable objects are simple
  • Immutable objects 天生线程安全
  • Immutable objects 提供failure atomicity
  • 缺点是:对于每个不同的value, immutable classes需要创建一个separate object
Java平台库包含哪些immutable classes?
  • String;boxed primitive classes;BigInteger 以及 BigDecimal
实现一个immutable class,应该遵守哪几点?
  • 不要提供能修改对象状态的methods
  • 确保你的类不能被继承
  • 设置所有的 fields为final
  • 设置所有的 fields为private
  • 对于任何可变的组件,确保你的独有访问权限
相对于继承,为什么更赞同使用组合?
  • 类的继承(一个类继承另一个类),适合在package内使用,即由同一个程序员控制;也合适于特殊设计并且约定好文档;
  • 跨package之间的继承危险性很大,它破坏了封装。
  • 继承仅仅使用于"is-a"的亲属关系,同时要考虑跨package的问题
  • 组合能避免上述继承的所有缺点,组合是:给你的新类一个private field,该field引用一个 instance of the existing class。
为什么相对于抽象类,优先使用接口?
  • 一个类只能继承一个抽象类,却可以实现多个接口
  • 已经存在的类能很容易的实现一个新的接口
  • 接口天生适合定义混合体
怎么合理利用接口和抽象类?
  • 提供一个 abstract skeletal implementation class to go with an interface,这是设计模式中的Template Method。
java8中接口中的默认方法的优缺点?
  • 可以在已存在的接口中添加新的方法,而基本不影响程序的编译
  • 添加默认方法,不能总是维护每个已经实现的不变性
  • 由于默认方法的存在,一个接口的已有实现可能编译通过,但运行失败。
为什么说接口只应该用于定义types?
  • 不要使用接口去定义常量类
不要写标签类(含switch),而去写类层次
相对于非静态成员类,为什么优先使用静态成员类?
  • 非静态成员类的每个实例都有一个对其包裹类实例的引用,存储这个引用既费时间又费空间。
  • 因为上述的引用,由于包裹类实例的保留,影响GC,可能造成内存泄漏。
不要在一个源文件中写多个top-level的类或者接口,否则容易形成恼人的Bug。

相关文章

  • 抽象类和接口的区别

    抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。 1、抽象类和接口都不能直接...

  • 类和接口

    在类和接口中,讲讲你对封装的理解? 一个组件的好坏,在于该组件在于其他组件交互时,隐藏其内部数据和其他实现细节的程...

  • 类和接口

    13,使类和成员的可访问性最小化 要设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对外部的其他模块而言...

  • 类和接口

    类与类的关系 继承关系,只能单继承,但是可以多层继承 类与接口的关系 实现关系,可以单实现,也可以多实现,还可以在...

  • java的final关键字

    ——修饰类、接口和抽象类 final可以修饰方法,属性,类!但是不能修饰接口,抽象类;因为 接口和抽象类本身就是...

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • Kotlin 类、对象和接口(三)——编译器生成的方法:数据类和

    Kotlin 类、对象和接口(一)——定义类继承结构Kotlin 类、对象和接口(一)——定义类继承结构 Java...

  • 接口与实现

    接口是比“abstract类”更抽象的类,在java中,类是单继承的,而接口可以实现多继承 接口包含接口声明和接口...

  • 接口和抽象类的区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类...

  • 接口

    什么是接口 .接口与类的相似点 接口与类的区别 .接口的特性 抽象类和接口的区别 重写接口中声明的方法时,需要注意...

网友评论

      本文标题:类和接口

      本文链接:https://www.haomeiwen.com/subject/dkspnxtx.html