java基础之访问修饰符

最近在看java编程思想,我认为其中一些知识很细致,也很经典,其中java中的修饰符也是重要的知识点之一,虽然不是很难理解,但是对于Java的面向对象的多态,封装,抽象确是有很重要的影响,比如一个类的访问修饰符是默认的,还是public修饰符,对于包内外的访问的范围是不一样。现在我就列出比较有意思的对于范围控制权限跟多态,重写(覆盖)的重要性。

现在先简单的介绍一下访问控制修饰符分为类修饰符和成员修饰符

类修饰符很简单就是:1.public修饰符 2.包范围修饰符(默认)。3.abstract修饰符 4.final 修饰符

1.那么包访问控制符,顾名思义就是包内的所有类我都可以访问到,我都可以实例化这些对象。只要不在类名前面写上public 修饰符就是默认为包范围。


2.当public修饰类时,顾名思义就是公共的,所有类都可以访问到,包内外都可以范围到,都可以实例化该对象。

3.abstract修饰符,用于抽象类(还没有看到哈,以后解释,不好意思~~~)

4.final修饰符,用于修饰类时,表示不让任何类继承(具体更多知识,跟我看完再说哈~~~~)


成员访问修饰符有:1.public 修饰符,2,protected修饰符  3.没有修饰符(缺省修饰符)4.private修饰符

根据顺序访问权限大小是 public > protected > default(没有修饰符) > private



通过这个表格很清楚的显示了不同修饰符对成员修饰符的讲解(后续将会对这个表格再进行讲解


那么通过今天的重点不是这个,今天的重点是访问修饰符对于继承,多态的的重要性。

现在举个例子:现在有个父类A,继承A类的子类B

public class A {

	/**
	 * 重载方法一  修饰符为public
	 * 
	 * @param i
	 */
	public void set(int i) {
		System.out.println(String.valueOf(i));
	};

	/**
	 * 重载方法二   修饰符为protected
	 * 
	 * @param i
	 * @param d
	 */
	protected void set(int i, String d) {
		System.out.println(String.valueOf(i) + d);
	};

	/**
	 * 重载方法三   修饰符为private
	 * 
	 * @param i
	 * @param d
	 * @param c
	 */
	private void set(int i, String d, String c) {
		System.out.println(String.valueOf(i) + d + c);
	};

}


可以看到A类重载了三个方法,注意此时方法的修饰符为public protected private。

实验开始:

当子类B继承父类A时。

1.子类不能重写(覆盖)父类A的private修饰的方法,但是子类B可以写一个跟父类A方法签名相同的方法,但是此时不能叫做方法重写(覆盖)

public class B extends A {

	/*
	 * public void set(int i, String d, String c) {
	 * System.out.println(String.valueOf(i) + d + c); };
	 */

	public static void main(String[] args) {
		B b = new B();
	    //	b.set(1, "2", "3");  //编译器提示:The method set(int, String, String) from the type A is not visible
	}

}



2.子类重写了父类public或者protected修饰的方法时,子类重写的方法修饰符访问不能变小,也就是不能是缺省的或者private 


public class B extends A {

	/*
	 * //编译器提示:Cannot reduce the visibility of the inherited method from A
	 * 
	 * private void set(int i) { System.out.println(String.valueOf(i)); };
	 */
	
	
	/*
	 *   //编译器提示:Multiple markers at this line
	 *     -overrides extendstext.A.set
	 *     -Cannot reduce the visibility of the inherited method from A
	 * 
	 * 
	 void set(int i) { System.out.println(String.valueOf(i)); };
	 */

	public static void main(String[] args) {
		B b = new B();

	}

好的,相信大家也看到了范围修饰符的重要性了吧,后续还会继续跟大家一起学习分享我java编程思想的一些小细节!!!!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值