可以通过内部类来隐藏具体实现, 当将内部类指定为private/protected时, 其它类就不能通过类名来直接访问内部类了, 也就隐藏了内部类的具体实现, 而外部类可以通过内部类实现的一些接口来提供其它类需要的一些服务, 并且在这种情况下对外提供的向上转型的引用是不能逆向转型的(因为其他类没有类名访问权限), 所以有很强的细节屏蔽/保护功能.
package com.cnsuning.inter;
public interface Flyable {
void fly();
}
package com.cnsuning.inter;
public interface Runable {
void run();
}
package com.cnsuning.animals;
import com.cnsuning.inter.Flyable;
import com.cnsuning.inter.Runable;
public class Zoon {
private class Duck implements Flyable{
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("Duck fly");
}
}
protected class Tiger implements Runable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Tiger run");
}
}
public Runable getRunableAnimal(){
return new Tiger();
}
public Flyable getFlyableAnimal(){
return new Duck();
}
public Zoon() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Zoon z = new Zoon();
Runable run = z.getRunableAnimal();
Flyable fly = z.getFlyableAnimal();
run.run();
fly.fly();
}
}
Tiger run
Duck fly