java中哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?相关的知识,希望对你有一定的参考价值。

默认修饰符是你想要的答案

参考技术A 修饰符: default(默认的、友好的friendly) 只能在自己的类和package中访问 参考技术B public 公共的可以在同一个包内访问(其他包内也可以访问)
friend 是有友好的可以在同一个包内访问(前面不加注释,就是友好的,这是默认)
参考技术C 同一个类 同一个包 不同包的子类 不同包的非子类
private √
default √ √
protected √ √ √
public √ √ √ √本回答被提问者和网友采纳
参考技术D 类内 包内 子类 包外
public yes yes yes yes
protected yes yes yes no
private yes no no no

java内部类

内部类

  指的是在Java中可以将一个类定义在另一个类的内部;

  内部类可以定义在 类的内部(与类成员层次一致)

  内部类可以定义在 方法/块内部(与类成员相差一个层次 方法的局部变量一个层次)

 

*1.成员内部类

  将一个直接定义在类的里面,作为成员,与属性或方法层次一致;

  成员内部类可以与正常类一样 使用不同的修饰符来修饰;

  好处1.省略了一个.java文件;2.成员内部类中可以访问外部类的所有成员 包括私有的;

  若想要在内部类中通过对象.调用外部类成员  外部类.this.外部类成员(属性/方法);

  创建内部类对象;通过外部类对象创建;

  内部类存在后 源代码进行编译 产生一个字节码 Demo$Include.class 外部类$内部类.class

2.局部内部类

  将一个定义在方法/块里面,作为成员的内部结构,与临时的局部变量一个层次

  局部内部类像是一个局部的变量一样,不能用public protected private 及static

  只能用abstract或final

  含局部内部类的字节码文件,如, Demo$1InnerTestMethod.class 外部类$1内部类.class(因为局部内部类可以重名,所以加数字)

  局部内部类 使用的变量只能是final修饰;编译 字节码定义好啦 由于变量的内容是可以改变

*3.匿名内部类

  成员匿名内部类

  局部匿名内部类

 

   通常是接口或抽象类的具体子类这样写;

  开发中为了省略一个类文件 上述写法比较常见;

  匿名内部类很特殊 只有类体 没有类的所有结构 (修饰符 名字 继承 实现)

  不能用任何修饰符来修饰 匿名内部类也没有构造方法;

  如,做一个按钮 绑定一个时间监听器;

4.静态内部类

  成员静态内部类

  不需要外部对象,通过正常的方式直接创建内部类;

  静态元素不能方法非静态成员(自己类和外部类都不可以)

package innerclass;
public class Demo{
	private String name="Demo类属性";
	{
	}
	public void testDemo(){
		System.out.println("testDemo类");
	}
	public void testDemoOne(){
		String s="abc";
		class InnerTestMethod{
			String xx=s;
			
		}//局部内部类;该方法完,则回收
		System.out.println("testDemo类");
	}
	/*
	public void testDemoTwo(){
		class InnerTestMethod{
			
		}//局部内部类;该方法完,则回收
		System.out.println("testDemo类");
	}
	*/
	
	public class Include{
		private String name="内部类属性";
		public void testInner(){
			System.out.println("testInner中=;;"+Demo.this.name);
			System.out.println("testInner中-;;"+this.name);
			Demo.this.testDemo();
			testDemo();
	}
	}//成员内部类;
	
	public static class InnerDemo{
	}//静态成员内部类
}

  

package innerclass;
import innerclass.Demo.Include;
import innerclass.Demo.InnerDemo;
public class Test{
	public static void main(String[] args){
		Demo a=new Demo();
		//Demo.Include b=a.new Include();
		//Include b=a.new Include();
		Include b=new Demo().new Include();
		b.testInner();
		
		InnerDemo c=new InnerDemo();
	}
}

 

 

 

 

 

以上是关于java中哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 实例变量修饰符

封装,最终修饰符

java类中的成员缺省(默认的)的修饰符是啥??

在Java中,为什在定义常量中要加修饰符final?到底起啥作用呢,能不能不加?

Java中成员属性默认访问修饰符是啥

第4.2章