もう遅いでしょうが、目に入ってしまったので答えます。
Java
1public interface Animal {
2
3 void bark();
4}
5
6public class Dog implements Animal {
7 @Override
8 public void bark() { System.out.println("ワン"); }
9 public void sleep() { System.out.println("zzz..."); }
10}
11
12public class Egachan implements Animal {
13 @Override
14 public void bark() { System.out.println("ウォ~"); }
15 public void bark2() { System.out.println("がっぺむかつく"); }
16}
ってな感じで定義があったとします。呼び出し側は…
Java
1public void main(String[] args) {
2 Animal[] animals = new Animal[] { new Dog(), new Egachan() };
3 for(Animal animal : animals) {
4 animal.bark(); // ←これはどちらもOK
5 if(animal instanceof Egachan) {
6 ((Egachan)animal).bark2(); // ←これは「外部から型を明確にしない限りは…」の例
7 }
8 }
9}
「クラスに対するアクセスを制限する制約」とは上記を例にとると、DogもEgachanもAnimal型で扱っている限り、bark()メソッドしか呼び出せません。sleep()もbark2()もアクセスできないことから「アクセスを制限する制約」との意味でしょう。
「外部から型を明確にしない限り…」は上記例にあるよう、キャストして実装クラスを明らかにした場合のことでしょう。
もしインターフェースについてご興味があれば、以下の書籍をオススメします。
【「先輩、Javaのインターフェースって何ですか?」の答えに窮した時に読む本】
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。