private详解:一个方法可以访问所属类所有实例对象或其外部类的私有部分

a和b都是Person类的对象,a调用equal()方法不仅可以访问自身的this.name还可以访问b.name

class Person {private String name;public Person(String name) {this.name = name;}public boolean equal(Person person) {return this.name.equalsIgnoreCase(person.name);}
}class test {void main() {Person a = new Person("tom");Person b = new Person("john");boolean isEqual = a.equal(b);}
}

p是Person类的对象,a是Animal类的对象,p调用equal()方法可以访问自身的this.name,却只能通过getName()方法访问a的name

class Person {private String name;public Person(String name) {this.name = name;}public boolean equal(Animal animal) {return this.name.equalsIgnoreCase(animal.getName());}
}class Animal {private String name;public Animal(String name) {this.name = name;}public String getName() {return name;}}class test {void main() {Person p = new Person("tom");Animal a = new Animal("john");p.equal(a);}
}

内部类方法可以访问外部类的私有部分

class Outclass {private String name;class innerClass {private int age;void printName() {System.out.println(name);}}
}

(default)详解:一个方法可以访问同包内所有default部分


Person类属于demo0包下

package com.example.demo0;public class Person {String name;public void setName(String name) {this.name = name;}
}

demo0类属于demo0包下,可以访问同包下的Person类及其中的(default)name,也可访问相同文件下的Animal类及其中的(default)name

package com.example.demo0;public class demo0 {void test() {Person p = new Person();p.name = "tom";Animal a = new Animal();a.name = "cat";}
}class Animal {String name;
}

demo1类属于demo1包,访问demo0包中的Person类需要import导包,且无法访问Person类的(default)name

package com.example.demo1;import com.example.demo0.Person;public class demo1 {void test() {Person p = new Person();p.setName("john");}
}

protect详解:实现不同包下子类对父类方法的使用

protect具有包可见性,如下Person及其子类Man都在同demo0包

package com.example.demo0;public class Person {protected void print() {System.out.println("Person");}
}class Man extends Person {}

在同一个包内protect和default无区别,通过包可见性以下调用都可运行

Person p = new Person();
p.print();
Person pm = new Man();
pm.print();
Man man = new Man();
man.print();

对于不同包下的子类,如Woman在demo1包:

package com.example.demo1;import com.example.demo0.Person;public class Woman extends Person {}

以下调用都不可运行

Person person=new Person();
//person.print();
Person pw=new Woman();
//pw.print();
Woman woman=new Woman();
//woman.print();

protect是位于defualt和public之间的作用域,当一个父类方法对其不同包下的所有子类不是必须的,部分需要该方法的子类调用时,通过重写实现不同包下子类对父类方法的使用,最好的例子是Object的clone()方法

在Woman里重写print()方法,若重写为protect则只能在当前包使用,若为public则可在任意地方使用

public class Woman extends Person {@Overrideprotected void print() {super.print();}
}

print()方法只有子类可以调用,即protect无法多态,多态只能通过public

Person person=new Person();
//person.print();
Person pw=new Woman();
//pw.print();
Woman woman=new Woman();
woman.print();

Java中级——private、default和protect详解相关推荐

  1. java中级考试 考点_Java API详解+面试考点

    一.知识点回顾 -1.String,.StringBuffer和StringBuilder -2.包装类和数据转换 -3.Date和Calendar -4.List.Set和Map接口 二.java. ...

  2. Java(enum)枚举用法详解

    转载自 Java(enum)枚举用法详解 本篇文章主要介绍了Java 枚举用法详解,枚举的好处:可以将常量组织起来,统一进行管理.有兴趣的可以一起来了解一下. 概念 enum的全称为 enumerat ...

  3. java类修饰词和内部类详解

    java类修饰词和内部类详解 控制属性: 同一类内     同一包内      子类     所有类 public            可             可         可       ...

  4. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

  5. java 枚举类型enum的用法详解

    Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...

  6. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  7. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

  9. 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

    windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15   作者:    我要评论 http://www.jb51.ne ...

最新文章

  1. 使用UEFI模式安装win10中的格式化磁盘问题
  2. 未来企业IT选型将更关注社交性(转载)
  3. linux定时执行python脚本_linux定时执行python脚本的方法以及失败不执行的处理方法...
  4. springboot整合mybatis增删改查(三):mybatis逆向工程
  5. python拆堆和堆叠的操作_python - 如何合并不同的DFS并堆叠值? - 堆栈内存溢出
  6. c语言中字符串操作的工具类
  7. TID大会学习心得之敏捷软件架构-微服务
  8. Java Web工程结构_项目结构
  9. 多对一!分组查询!MySQL分组函数,聚合函数,分组查询
  10. 前端:background背景图
  11. 全面分析RHCE7(红帽认证工程师)考试题目之 ----NFS文件共享 篇
  12. 吴恩达深度学习——机器学习策略(二)
  13. php session失效
  14. Android 属性动画实现一个简单的PopupWindow
  15. 当时光匆匆才知道梦想遥不可及
  16. 使用各种姿势舒服的部署微前端项目(上:打包与上传)
  17. 圣天诺SuperPro狗模拟视频语音教程
  18. vue开发移动端使用video.js播放视频
  19. 政策更新 | 开发者如何处理软件包可见性
  20. 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑

热门文章

  1. 作文经典好词好句好段摘抄大全
  2. android json解析优秀文章
  3. 用python画雪人-萌系新潮玩,唱多多小雪人麦克风天猫独家首发
  4. python中如何求水仙花数_python如何求水仙花数?
  5. SecureCRT连接及配置
  6. 关于DMA,TCM(ITCM和DTCM)和Cache
  7. 云计算、大数据、人工智能傻傻分不清楚?本文详解这三者的关系
  8. css3实现qq制作QQ登陆界面
  9. Linux Centos7:11.给系统增加一块硬盘
  10. unity实现简单巡逻兵