美文网首页
读 effective java 中文版第二版读后感(第五天)

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

作者: 隔壁小新 | 来源:发表于2019-09-27 17:36 被阅读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);
      }
    }
    

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

    相关文章

      网友评论

          本文标题:读 effective java 中文版第二版读后感(第五天)

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