Java中访问控制符与修饰符的区别与联系详解


一、说明

     前期学习的时候,总是把访问控制符与修饰符之间的使用给弄混,今天又遇到了这方面的疑惑,于是就查资料给弄明白了,下面是我以个人的理解方式给和我有相同困惑的朋友讲解一下,如果有不足之处请指出,我会及时采纳意见,及时更新,希望能帮助更多自学的朋友。。。

1、访问控制符

1.1 定义类时的访问控制符:public或 默认。类只有这两种访问控制符。

  • 如果为public类,则该类可以被其他类所访问。
  • 如果为 默认 类,则该类只能被该包中的类所访问。

1.2 方法与变量的访问控制符

作用范围| |访问控制符publicprotected默认(包可访问)private(私有)
同一个类中
同一个包中 
不同包中的子类  
不同包中的非子类   
2、修饰符
 含义修饰类修饰字段(成员变量)修饰方法修饰局部变量
static静态的,非实例的、类的仅可修饰内部类 
final最终的、不可变的、唯一的
abstract抽象的,不可实例化的  
3、用法

    (1)访问控制符和修饰符之间可以互相搭配使用:
    注意:private与abstract不能搭配使用:因为abstract 是为了用来让子类继承的,子类不能继承父类 private 方法。

//1、类的访问控制符与修饰符的搭配使用

public class Student {
	//可以在整个项目的所有包中使用的Student类
}

class Student {
	//只能在本类和本包中使用的Student类,不能在其他包中使用
}

public final class Animal{
	//只能在本能类中使用的Animal类
 }

final class Animal {
	//只能在本能类中使用的Animal类
}
public abstract class Cat{//可以在整个项目的所有包中使用的抽象Car类
}

abstract class Cat {//只能在本包中的使用的抽象Car类
	}
}

//2、方法、变量的访问控制符与修饰符的搭配使用,方法的使用范围要在类的使用范围之类
public class Student {
	public String name;//可以在其他包中通过Student对象调用此属性
	String gander;//只能在本包中使用
	public final int age = 10;//可以在其他包中使用的用final修饰的常量,定义的时候必须先进行赋值
	final int salary = 1000;//只能在本包中进行使用的用final修饰的常量,定义的时候必须进行赋值
 	private static String address;//只能在本类中使用的私有静态属性
 	private final String address1="中国";//只能在本类中使用的私有唯一属性,必须赋值
	public void run() {
		//本类用public修饰,是可以在整个项目中可以使用的类 
		//所以此方法是可以在整个项目中都能通过Student的对象进行调用的方法
		//如果该Student类是:默认,protected、private修饰,则该方法
		//只能在Student类的作用范围内使用
	}
	void run1() {
		//默认访问控制符修饰的方法,该方法只能在本包中使用
	}
	public final void run2() {
		//此方法是可以在整个项目中都能通过Student的对象进行调用的用final修饰的方法
		//该方法用final修饰,不能被重写可以被重载
	}
}

    (2)abstract 不能修饰 static、final、synchronize、native 和 构造方法、属性:
       ①:static:static 是属于类的,在类加载时同时被加载了,被类的所有实例共享,而且一定存在具体的实现。但是抽象类不能创建类的实例,抽象方法也没有方法体,这两个关键字本身就存在矛盾。
       ②:final:final 的目的是防止属性和方法被修改,不能被继承,但是抽象方法就是用来被继承的。
       ③:synchronize:一种线程锁,需要具体操作才能进行同步,但是 abstract 修饰的方法没有方法体,也就没有具体的实现操作。
       ④:native:本地的,本身与abstract就冲突,native是把方法实现交给本地操作系统,而 abstract 是将实现交给子类重写的方法,他们都是方法的声明。
       ⑤:构造方法:对象创建过程中会调用构造器,利用构造器来初始化数据,但是 abstract 修饰的方法没有方法体,只是为了用来被继承的。
       ⑥:属性:java 规定 abstract 只能修饰类和方法,不能修饰属性。属性是类的一些特点,abstract 是为了抽象化,将类的属性进行抽象化没有实际的意义。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值