子类和父类中方法和变量访问权限
2007-01-19 23:24
218 查看
1。一个覆写方法的访问修饰符所提供的访问权限与被覆写方法的访问修饰符所提供的访问权限相比,至少要
一样多
2。但是。对一个域来说,当它要隐藏另一个域时,如果隐藏域的访问修饰符提供的访问权限比被隐藏域的少,
尽管这么做不可取的,但是它确实是合法的
class Base
{
public String className = "Base";
public void pr()
{
}
}
class Derived extends Base
{
private String className = "Derived";//尽管变量可见性小了,但是却是合法的,因为这个时候,子类
//并没有从父类继承className变量,而是隐藏了父类的同名方法
/*下面这个就不能运行
private void pr()
{
}
*/
}
public class PrivateClass
{
public static void main(String[ ] args)
{
System.out.println(((Base)new Derived()).className);
}
}
尽管Base 有一个公共域className,但是这个域没有被继承到Derived 类中,因为它被Derived.className
隐藏了。但是通过强制类型转换也可以访问到父类被隐藏的方法。
需要说明的是如果子类有一个pr()方法,父类也有一个pr()方法,你生存了子类的一个实例,但是你企图用强制类型转换来让它调用父类的方法,这个是做不到的(除了在子类内部,通过使用super 关键字方法)。然而被隐藏的变量却是可以的
一样多
2。但是。对一个域来说,当它要隐藏另一个域时,如果隐藏域的访问修饰符提供的访问权限比被隐藏域的少,
尽管这么做不可取的,但是它确实是合法的
class Base
{
public String className = "Base";
public void pr()
{
}
}
class Derived extends Base
{
private String className = "Derived";//尽管变量可见性小了,但是却是合法的,因为这个时候,子类
//并没有从父类继承className变量,而是隐藏了父类的同名方法
/*下面这个就不能运行
private void pr()
{
}
*/
}
public class PrivateClass
{
public static void main(String[ ] args)
{
System.out.println(((Base)new Derived()).className);
}
}
尽管Base 有一个公共域className,但是这个域没有被继承到Derived 类中,因为它被Derived.className
隐藏了。但是通过强制类型转换也可以访问到父类被隐藏的方法。
需要说明的是如果子类有一个pr()方法,父类也有一个pr()方法,你生存了子类的一个实例,但是你企图用强制类型转换来让它调用父类的方法,这个是做不到的(除了在子类内部,通过使用super 关键字方法)。然而被隐藏的变量却是可以的
相关文章推荐
- 子类和父类中方法和变量访问权限
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 为何Java中子类重写方法的访问权限不能低于父类中权限
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 为何Java中子类重写方法的访问权限不能低于父类中权限
- 子类重写父类方法的访问权限
- C++中父类成员变量和子类成员变量重复定义及访问方法的深入探究
- 子类用反射可以访问父类中的私有成员变量及方法
- Java 多态 父类和子类方法的访问控制权限
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- JavaSE8基础 子类中所有的构造方法默认访问父类中无参构造方法
- java 父类访问子类对象的实例变量 继承过程中的执行顺序
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- 重载:子类方法访问属性不能比父类方法高
- 子类重写父类方法时的方法权限变化
- Java基础知识强化17:JAVA不可以将所覆盖的方法的访问权限变得比父类的小
- 子类继承父类后重载protected方法提升访问权限为public
- 【java基础】变量和方法的访问权限
- Java 中子类是否只继承父类的非私有变量和方法?
- 在子类中,一定要访问父类的有参方法?