读 effective java 中文版第二版读后感(第五天)

2019-09-27  本文已影响0人  隔壁小新
第13条 使类和成员的可访问性最小

心得体会:
本条主要是让程序员在编写类和成员变量的时候,尽量去定义到最小的访问权限,此条比较简单

第14条 在公有类中使用访问方法而非公有域
          public class student{
                        public String username;
                        public String password;
}
    通过本条的学习,重新编写此类
public class student{
      private String username;
      private String password;
    public void setUsername(String username){
                    this.username=username;
    }
    public void setPassword(String password){
                    this.password=password;
    }
    public String getUsername(){
                    return this.username;  
      }
  public String getPassword(){
                   return this.password;     
}
}
第15条 使可变性最小化
      此条就是创建不可变类的方法:不可变类就是在创建实例之后就不能被修改的类。每个实例中包含的所有信息都必须在创建该实例的时候就提供好,并且在生命周期中固定不变的。

定位不可变的方法需要遵循一下几条:
1.不要提供任何可以修改对象的方法
2.保证类不会被扩展
3.使用所有的域都是final的
4.使所有的域都是私有的
5.确保对于任何可变组件的互斥访问
java平台类中包含许多不可变的类(String,BigInteger,BigDecimal)

      public final class Complex{
          private final double re;
          private final double im;
          public Complex(double re,double im){
                this.re=re;
                this.im=im;
}
    @override
      public String toString(){
                return "("+re+" and "+im+")";
        }
      }
第16条 复合优先于继承

心得体会:
当此类不是为了继承而实现的,当继承了此类后,当超类出现变化后,继承他的子类可能就会用意想不到的事情

  public class ForwardingSet<E> implements Set<E>{
      private final Set<E> s;
      public Forwarding(Set<E> s){
            this.s=s;
      }
      public void clear(){
        s.clear();
    }
    public boolean contains(Object o){
      s.contains(o);
    }
    public boolean isEmpty(){
       s.isEmpty();
    }
}
public class InstrumentedSet<E> extends ForwardingSet< E>{
    public InstrumentedSet(Set<E> s){
            super(s);
    }
  public boolean add(E e){
      return super.add(e);
  }
}

而使用复合类实现接口的话就能解决继承出现的超类修改,子类不能使用的问题

上一篇 下一篇

猜你喜欢

热点阅读