用范例谈关于修饰符的经验

用实例谈关于修饰符的经验

1、protected

  在Observable里面有这么个方法:

    protected synchronized void setChanged() {
changed = true;
    }

  

在它的子类里面可以调用:

package com.gzmu.observer.observable;

import java.util.Observable;

public class Publisher extends Observable {
    
    private String magazineName;
    
    public String getMagazineName() {
        return magazineName;
    }
   
    public void publish(String magazineName) {
        magazineName = magazineName;
        //这里算是见识到了,protected修饰的方法,在 子类里面可以调用。但在其它的类里边,就算是拿到了子类的实例,也不能调用。
        setChanged();
        notifyObservers(this);
    }

}

在其它的类里边不能调用,拿到了子类的引用也不能:

package com.gzmu.observer.test;

import org.junit.Test;

import com.gzmu.observer.observable.Publisher;
import com.gzmu.observer.observable.TVStation;
import com.gzmu.observer.observer.Reader;

public class TestCase {
    
    @Test
    public void register() {
        
        Reader reader = new Reader();
        
        Publisher publisher = new Publisher();
        publisher.addObserver(reader);
 
       // publisher.publish("Kent.Kwan的技术空间");
       //上面的那行代码是在publish方法里面调用setChanged,我现在想不能过publish方法,而是直接调用setChanged,尝试如下:

       publisher.setChanged()   XXXX错错错!提示没有这么方法,方法不可见    

     //通过这次经验算是真正理解了protect修饰符的威力了。
        
    }
    
}


扩散联想:

2、private 。肯定是在子类里面也不能调用,只有在原始类里面才可以调用的方法。


3、public 。 如果是public,那上面例子中的方法就可以正常调用了。