容易犯错的问题点

1.我们都知道protected类型的方法或者域, 可以被同包下的其他类访问, 或者该类的子类访问. 除了这两种情况都不能访问protected权限的字段或者方法.  其实这句话只是笼统地说了下protected的作用, 并不完全对, 看代码

package parent;

/**
 * Created by xinfengyao on 17-1-15.
 */
public class Parent {
    protected int i;

    protected void print() {
        System.out.println("parent中protected权限的print()方法");
    }
}

package sub;

import parent.Parent;

/** * Created by xinfengyao on 17-1-15. */public class Sub1 extends Parent {

protected void sub1Print() {        System.out.println("sub1Print");    }

public static void main(String[] args) {        Parent parent = new Parent();        parent.print();        System.out.println(parent.i);

Sub1 sub1 = new Sub1();        sub1.print();        System.out.println(sub1.i);

}}
 

idea显示编译出错:

  

  我们看到Parent类和它的子类Sub1是在不同包中的, 在子类Sub1中, 不能通过父类类型的变量访问父类中的protected成员和protected方法. 但是可以通过子类类型变量访问从父类那继承过来的protected成员和方法.

  在看段代码:

package sub;

import parent.Parent;

/** * Created by xinfengyao on 17-1-15. */public class Sub2 extends Parent {    public static void main(String[] args) {        Sub1 sub1 = new Sub1();        sub1.print();        System.out.println(sub1.i);

sub1.sub1Print();

Sub2 sub2 = new Sub2();        sub2.print();        System.out.println(sub2.i);    }}

idea也编译报错:

  因此我们可知, 在子类中, 不能访问兄弟类(即直接父类是同一个类)中从父类那继承过来的protected方法, 但是可以访问同一包下的兄弟类中自己创建的protected方法.

总结:

(1). 子类中不能通过父类类型的变量, 访问父类中的protected方法和成员, 只能通过本身类型的变量访问从父类那继承过来的protected方法和成员

(2). 子类中不能访问兄弟类中从父类那继承过来的protected方法, 但是可以访问同一包下兄弟类自己新增的protected方法

时间: 2024-11-05 05:45:37

容易犯错的问题点的相关文章

哪些要素在做产品需求的时候容易犯错?

产品经理是一个思考的工种,而多想多思考成为产品经理成长最为关键点.而经验会帮助产品经理在产品需求认知和产品设计上不会犯错误,而快速进入角色.很多新手却办不到这一点. 一.判别需求是否真实存在?需求真伪性 当产品经理接到一个业务部门的需求,一个老板的需求.很多人惯性的思维是如何完成这个需求.而展开对需求思考.但是在此之前,我们需要去判别这个需求的真伪性.如果是伪需求,那么做出来是对我们的产品没有任何的意义.需求是否真实存在,真实性如何?是否有场景可以承接这个需求本身. 二.表面需求后,没有去了解更

javascript sort方法容易犯错的地方

sort方法用来对数组排序非常方便.但是sort(func)这个func参数的构造却很容易混淆. 这个func的作用是,把排序结果里任意相邻两项a,b放入到func里来执行,如果返回值都为-1,则为正序排列,如返回值都为1,则为逆序排列. 例如,[1,3,65,97,45,6,2] 如果要正序,就应该写成[1,3,65,97,45,6,2].sort(function(a, b){return a - b;}), 如果要逆序:[1,3,65,97,45,6,2].sort(function(a,

致DBA:为什么你经常犯错,是因为你做的功课不够

专职做DBA已经6年多的事件了,看同行.同事犯了太多的错误,自己也犯了非常多的错误.一路走来,感触非常深.然而绝大多数的错误其实都是很低级的错误.有的是因为不了解某个引擎的特性导致:有的是因为对线上环境不了解导致:有的是因为经验不足导致:一路上,跌跌撞撞,从小公司DBA,到腾讯高级DBA,再到现在的金融数据库DBA. 不由得想起5年前的我,刚进入DBA行业,缺乏经验,经常犯错误,不是我不够努力,更多的是初来咋到的我根本不知道应该在哪方面下功夫.本文就是基于这方面的考虑,根据自己在DBA这个职业上

作用域--高手都容易犯错的地方

在js中,我们都知道,this的指向是由它被调用时的上下文所决定的.例如: window.id = 888; var data = { id : 999, getId : function(){ console.log(this.id) } } data.getId(); // 999; var getId = data.getId; getId(); // 888 当我们在data上调用getId方法时,this显然是指向data对象的.这个很好理解,我们需要注意的是,当我们把data上的ge

Makefileeasy犯错的语法

1.引言 近期学习android的Build系统,接触最多的自然就是Makefile语法.发现非常多easy出错的地方,不避开这些错误语法没法真正了解Makefile的内涵.以下就介绍遇到的一些让人困惑的语法错误 2.列举easy犯错的地方 ifeq条件推断 ifeq($(fro),no) endif 多么简单的语法.可是运行会报错例如以下: Makefile:2: *** missing separator. Stop. 原因: ifeq和左括号'('之间是必须有空格的. shell脚本的使用

应试教育的死穴,恰在于堵死了孩子“犯错”的空间

今天周日,闲着没事,来公司梳理一下最近的项目心得,又翻起了前段时间看到的文章<应试教育的死穴,恰在于堵死了孩子"犯错"的空间>,来浅谈一下自己的感受吧! 还是从自身谈起,小时候手笨,脑子不是很灵活,于是会出现各种的问题,这时候老师就开始发火.生气,轻则骂几句,重则棍棒伺候.于是在这种环境下,总是害怕犯错事,害怕犯错误. 还有一种情景,就是所谓的考试了,尤其是语文考试,相比大家都经历过,对于一篇阅读理解的分析,每个人都有自己的见解,写写自己的心理体会不就得了,可总是会有一种所

JAVA 犯错汇总

ResultSet-->next() //伪代码 ResultSet rs = null; rs1 = stmt.executeQuery(); //if(!rs.next()){ //这里就是坑我代码 // return false; //} while(rs.next()) { //rs.next()这个方法坑了我,让我总是得不到第一条数据 执行一次,往下走一回,我靠,不带这么坑的 } JAVA 犯错汇总

[C/C++]_[初级]_[编程容易犯错的地方]

场景: 1. 这里总结一些日常的容易犯错的细节. 问题1:一个类A有成员变量int deleted,给定一个A的对象指针 *a, 判断deleted为真的时候输出一个语句. 一般情况下新手会这样写: if(a) { if(a->deleted) { cout << "deleted" << endl; } } 但这样其实不够精简和浪费行数, 应该这样. if(a && a->deleted) { cout << "

勇于犯错才能更好的成长

朋友,假如你希望你一生都不犯错误,假设你真如愿以偿,那我会告诉你:你生最大的错误就是你没有任何过错. 意大利的朗根尼西说过:“不要给我忠告,让我自己去犯错误.”这似乎只是一句妙语,事实上含有很深刻的意义.一个人怕犯错,就是畏惧现实,一个人想逃避犯错,就是逃避现实,他永远不会在生活中独立,自强.不要简单地否认它,想一想,试一试,你就会理解朗根尼西的话. 过错在一定意义上并不是坏事.任何事物都具有其二重性,有好的一面也有坏的一面.过错也不例外.它虽然会给你带来一些损失,但要知道,一个人如果没有相对的

《设计师要懂心理学》-第九章-人会犯错

第九章  人会犯错 人皆有错,难能宽恕. ——亚历山大·蒲柏 人都会犯错.创建一个防止人们犯错的系统是不可能的.本章将介绍与人犯错有关的知识. 85.人总会犯错,没有完全的容错产品 要点: 1)应假设总会出错 很难创建一个不存在任何错误并且保证人们不会犯错的系统.设计一个容错系统的成本很高,而且你永远不会真正成功.(产品的快速迭代,不断修复错误) 2)最好的错误提示就是没有提示 也许错误提示是一台设备或软件系统中花费时间和精力最少的部分,也许这样做很合理.毕竟,最好的错误提示就是没有提示,这意味