yes*_*per 62 java inheritance access-modifiers
为什么Java指定覆盖方法的访问说明符可以允许比重写方法更多但不是更少的访问?例如,超类中的受保护实例方法可以在子类中公开,但不是私有的.
Mau*_*res 34
想象一下这两个类:
public class Animal {
public String getName() { return this.name; }
}
public class Lion extends Animal {
private String getName() { return this.name; }
}
Run Code Online (Sandbox Code Playgroud)
我可以写这段代码:
Animal lion = new Lion();
System.out.println( lion.getName() );
Run Code Online (Sandbox Code Playgroud)
它必须是有效的,因为在Animal上方法getName()是公共的,即使它在Lion上是私有的.所以不可能在子类上使事情变得不那么明显,因为一旦有了超类引用,就可以访问这些东西了.
举个例子
class Person{
public void display(){
//some operation
}
}
class Employee extends Person{
private void display(){
//some operation
}
}
Run Code Online (Sandbox Code Playgroud)
典型的重写发生在以下情况中
Person p=new Employee();
Run Code Online (Sandbox Code Playgroud)
p
当我们调用p.display()时,这是类型为Person(超类)的对象引用
.由于访问修饰符更具限制性,因此对象引用p
无法访问Employee类型的子对象
因为它会很奇怪:
class A {
public void blah() {}
}
class B extends A {
private void blah() {}
}
B b = new B();
A a = b;
b.blah(); // Can't do it!
a.blah(); // Can do it, even though it's the same object!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47996 次 |
最近记录: |