接口 和 类

目录

接口和类

1.最小化类和成员的访问权限

功能模块对外隐藏内部的信息(封装),而Java中的类就可以看作是一个模块.
在自己设计类的时候,应尽可能的是每个类或类的成员不被外界访问,尽可能提供最小的访问权限.

public class Apple {
    
    
    // 设为private, 对这个类的字段信息进行封装
    private String type;
    private Double weight;
    // ...
}

1.private 只有声明这个字段的类的内部才能访问(类私有)
2.default 包内部的任何类都可以访问(包私有)
3.protected 包内任何类和子类可以访问这个字段(包和子类私有)
4.public 任何地方都可以访问

公有类的字段提供访问方法而非设为公有字段

公有类的字段不应直接暴露(不能设为public,这样没有对类进行封装),而应该提供访问(getter)和修改(setter)方法.

最小化可变性

不可变类是其实例不能被修改的类,每个实例中包含的所有信息都必须在创建的时候提供,并在整个对象的生命周期内固定不变.
Java类库中的不可变类:String, 基本类型包装类, BigInteger, BigDecimal
设计一个不可变类应纯熟的规则:
1.不提供任何修改对象状态的方法
2.保证类不会被扩展(将类设为final不可继承)
3.类的所有字段都设为final
4.所有字段都设为私有
5.保证对任何可变的组件独占访问

复合优于继承

在包内部使用继承非常安全,因为子类和父类的实现都是由同一程序员控制.但对于跨包边界的继承,则是非常危险的,同时继承违破坏封装.
复合(composition): 不扩展现有的类,而是在新设计的类中增加一个私有字段,引用一个现有类的实例,这种设计被称为复合.
这样现有的类就变成了新设计的类当中的一个组件,新类中的每个实例方法都可以调用包含现有类的实例中对应的方法,并返回结果,这样设计的类就不会依赖于现有类的实现细节,达到解耦的效果.

对于继承的类提供文档说明,否则禁用继承

接口优于抽象类

接口只用于定义类型

类继承优于标签类

用函数对象表示策略

这条针对JDK8以下版本,还没有lambda表达式.如果需要调用一个方法,就需要

优先考虑静态成员类

嵌套类(nested class):被定义在另一个类中的类.
嵌套类存在的目的应该只是为了它的外围类(enclosing class)提供服务.
嵌套类有4种:静态成员类(static member class)非静态成员类(nonstatic member class)匿名类(anonymous class)局部类(local class).
第一种之外的三种被称为内部类.
静态成员类可以看作是一个普通的类,只是被定义在了另外一个类的内部,它可以访问外围类的所有成员.静态类是外围类的一个静态成员,也遵守访问规则,如果被声明为私有,这只有外围类可以访问.

Guess you like

Origin blog.csdn.net/sunday2018/article/details/120031321