zoukankan      html  css  js  c++  java
  • Java 几个权限关键字

      本文由广州疯狂软件java培训分享:

      注:protected 既包括protected 域,又包括protected 方法,以下统称为protected!

      看到protected,我们想到的可能是:protected 既提供包访问权限,同时对继承自该类的所有子类(或子类的下级子类)提供访问权限 !这句话是没有错的,不管子类与父类是否位于同一包中,子类的对象都可以访问protected成员,因为这些成员已经带到子类中来了!

      本文之所以要对protected单独作出讨论,是因为protected并不是上面所提到的那么简单,还有许多情况是我们没碰到过的,这其中包含着陷阱,一不小心,就会触发异常!

      我们可以把对protected成员的访问分成两种情况,一种是创建子类对象,并且用该子类对象来访问protected成员,这个在本文第一段已提到 !

      这里,我们来讨论另一种特殊的情况:当子类与父类位于不同包中,在子类中创建父类对象,并用此父类对象来访问protected成员时,就会抛出一个异常!正如以下程序中看到的:

      package A;//父类所在的包

      public class Father {

      protected int i = 5;//父类中的protected 域

      protected void test() {//父类中的protected方法

      System.out.println(this.i);

      }

      }

      package B;//子类与父类位于不同的包中

      import A.Father;//导入父类

      public class Son extends Father {

      public static void main(String[] args) {

      Father f = new Father();//创建父类对象

      System.out.println(f.i);//此处会抛出错误

      f.test();//此处也会抛出同样的错误

      }

      }

      我们看到上面的程序会抛出两个错误,原因就在于:当子类与父类位于不同包中时,父类中的protected成员,对于父类本身是不可访问的,只有子类对象才可以访问!上面的程序我们可以把会出错的那两句改成:

      Son t = new Son();

      System.out.println(t.i);

      t.test();

      这样就不会出错!

      在上面的例子上,再做一点修改,把Father 中的test()改为protectedstaticvoid test()

      然后在Son类中创建Father f = new Father();

      此时,f 仍然不能访问f.i,但是f却可以访问test(),即用f.test()时,不会出错,原因是:

      因为test() 是static Method, static method 调用 不需要通过对象的实例,跟写成 Son.test() 是一样的效果 !

      总结

      当父类与子类位于同一包中时,不管是子类对象还是父类对象都可以访问protected,但是它们的意义是不一样的;对于子类对象,之所以可以访问是因为:子类从父类继承了protected成员,理所当然可以访问;父类对象(在子类中创建的)之所以可以访问是因为protected提供了包访问极限!

      当父类与子类位于不同包中时,protected成员就只能通过子类对象来访问(因为protected对于子类是可见的),而父类对象不再可以访问!不过,可以访问static 成员(因为protected的包访问极限已失去作用)

      public,private,protected 是“访问权限”基本修饰符,可修饰变量,方法,类,具有不同范围的限制

      简单理解:

      public 无限制

      private 同一个类中可访问

      protected “其它包中非子类”不可访问 (也就是说其他包中必须是子类才可访问,要存在继承关系,protected关键字就是为了继承而创造的)

      interface是接口,接口的概念和使用很广泛,是需要理解的基本的理解就是

      interface是抽象类,是一种简洁的,纯的抽象类,最大的用途就是实现多继承

      以下就是实现多继承的简单例子

      interface kou1

      {

      public void say1();

      }

      interface kou2

      {

      public void say2();

      }

      interface kou3 extends kou1,kou2 //●用的是extends

      {

      public void say1();

      public void say2();

      public void say3();

      }

      class Kid implements kou3

      {

      public void say1()

      {

      System.out.println("心情不咋滴");

      }

      public void say2()

      {

      System.out.println("不是很开心");

      }

      public void say3()

      {

      System.out.println("笑有点勉强");

      }

      }

      public class Maintest

      {

      public static void main(String[] args)

      {

      Kid kd=new kid();

      kd.say1();

      kd.say2();

      kd.say3();

      }

      }

      疯狂软件Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。高薪从IT名企请来项目经理为学员亲自授课,对学员进行实战教学,在疯狂软件教育,通过大量全真经典企业级项目进行集中培训,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂软件Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

      疯狂软件Java培训、iOS培训打造名企技术经理,成为中国软件产业的中流砥柱:全真企业需求,项目小组管理,大量实操项目的疯狂训练,企业全真案例教学,学成至少相当于两年工作经验“全真项目”教学,高强度的狂热训练,带领学生走近编程,感受编程,热爱编程,学完后产生凤凰涅槃般的重生。 “全真企业环境”模拟:以项目组形式管理,每个程序员(学员)对项目组长负责,组长向项目经理(老师)负责。以版本控制工具为引导,充分激发每个程序员对编程的激情 四个半月掌握近8~10万代码量,达到技术经理的代码掌握量。

  • 相关阅读:
    全景3d
    node.JS
    同步、异步
    必填
    this.$http.post ||this.$http.put||vue 获取url参
    硬编码转换单位||vue
    路由下二级跳转: childen 的childen
    vue侧边栏导航和右边内容一样高
    v-for v-if || v-else
    Python_Automation_04Email_smtplib
  • 原文地址:https://www.cnblogs.com/gojava/p/3688343.html
Copyright © 2011-2022 走看看