java子类方法权限为什么要等于大于父类的访问权限?

如题.这是什么原因.?重写为什么字类的方法要大于父类的方法.

3个回答

为了说明这个问题,你需要了解一个概念,或者说OO设计的一个准则,叫做里氏替换准则

参考:
http://blog.csdn.net/lovelion/article/details/7540445

如果你看懂了“在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。”

我们来看为什么“子类方法权限为什么要等于大于父类的访问权限”,因为只有这样,基类才一定可以用派生类代替。如果派生类的访问权限变小了,这个原则就没法成立了。

用了这么久都不知道这个名词啊。汗。。。。里氏替换准则

这个应该算是Java世界的准则,就像大自然里光速是极限,1+1只能等于2一样
没有规矩不成方圆,用脚玩的叫足球,用手玩的叫篮球,既然这个东西叫java,就得遵守规矩

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
子类方法的权限至少要大于父类方法的权限
已知如下类定义: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Base {    public Base (){   //...   }    public Base ( int m ){   //...   }    public void fun( int n ){
继承中子类权限大于父类的原因
一般实例域都是private ,不存在可以继承的问题,也就不存在子类权限要大于父类权限的情况,这种情况大多出现在成员方法中。 子类重写父类的方法,权限要大于父类的权限。 这个可以从两个方面解释 1.父类的存在是抽取了子类公有特点,由于java中单继承的局限性,如果子类将重方法的权限私自修改,其他子类将无法继承到方法从而进行重写 2.如果子类中重写方法的权限不大于父类权限的话,多态调用时将无...
java子类父类方法的调用
TestParent test = TestParent();test.testA();如果子类重写了父类的方法,会调用子类的方法,若未重写则调用父类的方法。package com.test; /** * @author Administrator * @date 2018/6/9 */ public class TestParent { public void testA()...
父类调用子类方法(java)
请问,如果父类有一个空的方法,有个子类实现了这个方法,那在用这个父类对象调用此方法的时候,是不是会默认调用其子类的这个方法呢?rn参考代码如下:rnpublic class baseLayout extends LinearLayoutrnrn ... ...rn public void onUpdate() rn ... ...rnrnpublic class derivedLayout extends imiLinearLayoutrnrn ... ...rn public void onUpdate() rnmAdapter.notifyDataSetChanged();//实现了父类的onUpdate方法rnrn ... ...rnrnprivate baseLayout mBaseView;//现在有个imiLinearLayout(父类)对象rnprivate derivedLayout mDerivedView;//现在有个BuddyLinearLayout(子类)对象rnmBaseView = (baseLayout)mDerivedView;rn... ...rnmBaseView.onUpdate();//调用此父类对象的onUpdate方法rn系统是不是会默认调用其子类derivedLayout 的onUpdate方法呢?
JAVA子类方法重写父类方法
子类方法覆盖父类的方法。
Java - 子类重写父类的方法
如果子类可以继承父类的某个方法,子类就可以重写这个方法 . 比如实例: 测试类: public class Test3_17 { public static void main(String[] args) { // TODO Auto-generated method stub double english = 73.6,math = 65 ,chinese = 6...
Java中为什么子类重写父类方法时抛出的异常不能大于父类异常
见下方示例代码: import java.io.*; public class Father { public void father_function() throws IOException { new File("a.txt"); } } class Son extends Father { @Override public void father_function() ...
为什么子类的构造方法要调用父类的构造方法
原因: 其实子类的所有构造方法的第一行都有一条隐身的语句super 解析: 在最开始总是看着其他人在写子类的构造方法的时候总是在第一句写出super(),开始有一些不理解,但是通过查找一些资料有了更为清晰的理解。 super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何...
为什么子类要调用父类的同名成员函数?
rnvoid CMyTestView::OnRButtonDown(UINT nFlags, CPoint point) rnrn // TODO: Add your message handler code here and/or call defaultrnrn AfxMessageBox("test");rn CView::OnRButtonDown(nFlags, point); //为什么要加此句,去掉后rn //也可以正常运行.rnrnrnrn//c++没理解好就用vc++开发,有难度啊!
子类为什么要继承父类的构造方法?
父类一大堆的构造函数,子类想使用默认的父类构造,但却需要继承每一个方法,然后使用super(参数);rn多麻烦呀!
Java 子类方法的父类方法相互调用
class A{ public void fun1(){ System.out.println("a:fun1"); this.fun2(); } /** * a:fun1 * a:fun2 */ private void fun2(){ System.out.println("a:fun2"
Java中父类方法与子类方法的执行顺序
JAVA子父类内部程序的执行顺序 ****************************************************************** 一、父类的静态成员赋值和静态块 二、子类的静态成员赋值和静态块 三、父类的成员赋值和初始化块 四、父类的构造方法 五、子类的成员赋值和初始化块 六、子类的构造方法 ************************...
JAVA子类方法覆盖父类方法
当子类和父类中出现同名同参方法时,需要进行覆盖(重写),否则将会编译失败。覆盖时需要子类方法权限大于等于父类方法权限(当父类权限为private时,为父类私有方法,此时因此方法未继承给子类,此时将不会发生覆盖)。若父类子类方法中某一个为静态方法,此时将无法进行覆盖,编译错误。若父类子类方法同名同参的两个方法皆为静态方法,此时,可正常覆盖。
子类调用父类的方法
今天在看某项目源代码时,我看到了这样的代码 class B{ public: void printB(){ A::PrintA(); } }; 看了这个代码,我以为printA是类A的static方法,结果找了半天没找到,很尴尬。。。原来子类调用父类就是这样调用的。 所有代码如下: class A{ public: void printA(){}...
子类调用父类方法
public class MainActivity extends FatherActivity { TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont...
子类调父类方法
window.parent.addTab('子明细',url);
子类父类方法问题
先上代码吧rn[code=C/C++]rnclass testrnrnpublic:rn virtual void my()cout << "test"<
子类屏蔽父类的方法
需求: 假设已经有鸟类的定义,现在我们定义鸵鸟继承了鸟类的属性。但是鸟类有会飞的方法,鸵鸟是不会飞的。那么鸵鸟类中应该如何屏蔽鸟类中会飞的方法呢?# -*- coding: utf-8 -*-class Bird: def fly(self): print("I belive I can fly!")class Ostrich(Bird): def fly(self
父类和子类的方法
定义两个类Person,Student. Student是Person的子类rnStudent中有一个方法 void geta();rnrnPerson p=new Person();rnrn为什么这样可以: (Student)p.geta();rnrnrnrn而这样不可以? :rnp=(Student)p;rnp.geta();
父类调用子类方法
请问,如果父类有一个空的方法,有个子类实现了这个方法,那在用这个父类对象调用此方法的时候,是不是会默认调用其子类的这个方法呢?rn参考代码如下:rnpublic class baseLayout extends LinearLayoutrnrn ... ...rn public void onUpdate() rn ... ...rnrnpublic class derivedLayout extends imiLinearLayoutrnrn ... ...rn public void onUpdate() rn mAdapter.notifyDataSetChanged();//[color=#008000]实现了父类的onUpdate方法[/color]rn rn ... ...rnrnprivate baseLayout mBaseView;//[color=#008000]现在有个imiLinearLayout(父类)对象[/color]rnprivate derivedLayout mDerivedView;//[color=#008000]现在有个BuddyLinearLayout(子类)对象[/color]rnmBaseView = (baseLayout)mDerivedView;rn... ...rnmBaseView.onUpdate();//[color=#008000]调用此父类对象的onUpdate方法[/color]rn系统是不是会默认调用其子类derivedLayout 的onUpdate方法呢?
继承、访问控制符、子类重载父类的方法、子类调用父类的方法
继承继承性也是面向对象程序设计中的重要特性之一,在面向对象领域有着极其重要的角色,它是指建立一个新的派生类,从先前定义的类中继承数据和函数,而且可以重新定或加进新的数据和函数,从而建立了类的层次或等级关系。但在php中只能使用单继承,就是说一个类只能直接从另一个类中继承数据,但是一个类可以有多个子类。在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性。这是信息组织与分类的行之有效的方法。它简
当子类重写父类的方法时,是不是子类的方法的可访问权限一定要比父类的高啊?为什么啊?
谢谢各位啦。
子类为什么可以覆写父类的方法?
class B extends A,A类方法被覆写(非抽象方法),在没之前,类B和类A应该没被写入内存里把?rnnew B()之后,生成一个包含类B和类A属性方法的内存地址,也就是父类和子类共用一个内存地址,所以才实现了覆写 是吗?rn麻烦大神教导下
为什么子类无法使用父类的方法和属性?
[code=C#]rn//基类rnpublic class BasePage : System.Web.UI.Pagernrn public BasePage()rn rn //rn // TODO: 在此处添加构造函数逻辑rn //rn rn private int userID;rn /// rn /// 用户IDrn /// rn public int UserIDrn rn get return userID; rn set userID = value; rn rnrn private string userName;rn /// rn /// 用户名rn /// rn public string UserNamern rn get return userName; rn set userName = value; rn rnrn private int userType;rn /// rn /// 用户类型rn /// rn public int UserTypern rn get return userType; rn set userType = value; rn rnrn rn public void SetUserCookie()rn rn UserID = Convert.ToInt32(Request.Cookies["UserID"].Value);rn UserName = Request.Cookies["UserName"].Value;rn UserType = Convert.ToInt32(Request.Cookies["UserType"].Value);rn rnrn[/code]rnrn[code=C#]rn//继承BasePagernpublic class BaseCompany:BasePagernrn public BaseCompany()rn rn //rn // TODO: 在此处添加构造函数逻辑rn //rn rn //BasePage bp = new BasePage();rn rnrn[/code]rn为什么BaseCompany里无法使用SetUserCookie,和一些属性是不是要用this. 可是this也点不出来相关属性和方法?
为什么子类的访问权限不能低于超类的访问权限
Effective Java在讲到使类和成员的可访问性最小的规范中: 如果方法覆盖了超类中的一个方法,子类中的访问级别就不允许低于超类中的访问级别。这样可以确保任何可以使用超类实例的地方也都可以使用子类的实例。 之前没有想过为什么要有这样的一条规则,只是当成语法记下来,可是看到这句话时想到了多态性,利用多形性: 将接口从具体的实施细节中分离出来,实现“是什么”与“怎样做”两个模块的分离,代码
为什么子类重写父类的方法不能低于其在父类中的访问权限?
如果子类重写的父类的方法的访问权限低于其在父类中的访问权限,会影响多态。 在父类中是public的方法,如果子类中将其降低访问权限为private, 那么父类在实现多态时如果调用子类的这个重写方法,但是这个方法已经是private,没有办法调用,所以就无法实现多态了。 public class Test { public static void main(String[] args) { ...
父类构造方法、父类静态方法、父类一般方法、子类构造方法、子类静态方法、子类一般方法调用顺序
调用顺序为:父类静态方法、  子类静态方法、父类构造方法、子类构造方法、一般方法谁先调用,谁先执行;                              测试代码:                                                   public class TestStatic {                                   
java 子类重载父类
java 子类重载父类class SuperClass { int i = 0; SuperClass(int i) { this.i = i; } SuperClass() { } } class ChildClass extends SuperClass { int n = 0; ChildClass() { super(200); } ChildClass
java递归查询父类下的子类
如题 表Arn MODULEID(PK) PROJECTNAME MODULENO PARENTNOrn uuid。hex的 语音 01 NOrn uuid。hex的 语音视频 0101 01rn uuid。hex的 语音通话 0102 01rn uuid。hex的 语音录入 0103 01rnrnrn这是我想要读取的树的结构rn 语音01rn --语音视频 0101rn --语音通话 0102rn --语音录入 0103rn 硬件rn --声卡rn --网卡rn --主版rnrn表就是这样的我想用递归遍历出 上边这个结构 怎么遍历啊 高手帮忙rn
Java父类和子类
-
【java】父类与子类
父类与子类,继承的好处就在这,虽然耦合高了点,但子类在class外可以直接调用父类的属性和方法。 包里就是这些东西 B.JAVA package Father; class A { int a; A(int a) { this.a=a; System.out.println("this is A constructor"); } ...
java学习笔记-子类与父类
子类继承父类,在新建子类实例时代码的执行顺序:1、父类的静态代码2、子类的静态代码3、父类构造器4、子类构造器class A { int a = 1; public A() { System.out.println(&quot;class A 构造器方法 。。。。&quot;); } static{ System.out.println(&quot;class A static...&quot;); } } publ...
Java子类父类初始化顺序
今天复习了一下Java基础知识,发现一个挺有趣的问题: Father类:package p2; public class Father { public Father() { // TODO Auto-generated constructor stub say(); } public void say() { System.out.println("I'm father"
java 子类,父类静态代码块
今天突然想起以前做的一个试题,有关子类和父类静态代码块中执行顺序的问题,在代码中子类父类的静态代码块是怎么执行的,有覆盖吗,是继承的还是怎么样的?对此做了一个小的测试: 一个People父类: public abstract class People { private static final String TAG = "People"; static {
java子类父类的关系
明白人给指点一下rn1.父类和子类的实例可以互相建立吗rnfather a = new son 或 son a = new father,两者都正确吗rn2.父类创建子类的实例有什么好处rn3.子父类之间能相互强转吗rn4.父类建立子类的实例或反之,之后的能使用的方法,是不是决定于变量的类型,而不是他所建立的实例rn5.不想子类继承父类的方法,是不是在父类的方法前面加final?(这个final是不是对父类的静态方法不好用)
Java 父类与子类 类型转换
子类转换成父类很自然,但是父类转换成子类需要强制类型转换,且只有父类的本质是子类时才会转换成功。//成功转换
Java 子类与父类的类型转化
1父类可以等于一个子类的实例 ,子类不可以直接等于一个父类的实例(猜测是因为方法和变量的缺失),必须使用强制转换否则抛出ClassCastException(转换异常) public static void main(String[] args) { Scanner sc = new Scanner(System.in); A a = b; a.Pr...
java父类和子类的异常问题
最近在看java的面试题,其中有关于子类和父类的异常问题,题目如下 public class MyException { public static void main(String[] args) { try{ throw new ExceptionB(); }catch(ExceptionA a){ System.out.println(&quot;catch Exceptio...
java子类父类的加载顺序
首先加载静态变量和方法: 父类静态变量 父类初始化快 子类静态变量 子类初始化块 再加载非静态变量和方法 父类变量 父类初始化块 父类构造器 子类变量 子类初始化块 子类构造器 最后其他
java 父类和子类
public static void main(String[] args) { Father a=new Father(); System.out.println("-----------"); Child b=new Child(); /** * Output: I'm father
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数