zoukankan      html  css  js  c++  java
  • 关于public private protected访问修饰符

        这个似乎都是老生常谈了,特别是找工作第一轮笔试的时候很爱考这些,再罗列一次,特别要注意继承的情况:

        默认状态:即是不加修饰符的时候,所谓的default状态,在类内部可以被访问,在相同的包下面的类也可以互相被使用,跨包则不可访问。

        public:这个当然是访问权限最宽的时候了,不仅可以在类内部进行访问,也可以在同一包中进行访问,还可以跨包来进行访问。

        private:被private修饰符修饰的属性与方法只能在该类的内部进行使用,在同一个包下的不同类也不能被互相访问,子类不会继承父类的private方法以及private属性。

        protected:这个总是忘记,特殊性就是体现在继承关系存在的时候。类内部肯定可以访问,也可以在同一个包下进行访问,该类的子类也可以进行访问,子类与父类不在同一个包中的时候不可以访问父类的protected属性或者是调用父类的protected方法

        特别注意一下protected以及public的区别,特别是跨包的时候,protected指的是受保护类型,继承关系存在的前提下,子类可以访问父类的受保护的方法和属性(但这个前提是在同一个包下),public则不会受到这个限制,即使是跨包的情况,也能互相访问。

        

    //下面的例子是在同一个包里面的继承情况
    //子类可以调用父类的 crow 方法
    package testa;
    
    public class Animal {
    	protected void crow(){
    		System.out.println("animal howl");
    	}
    }
    package testa;
    
    public class Cat extends Animal {
    	public static void main(String[] args) {
    		Animal c=new Cat();
    		c.crow();
    	}
    }
    
    //下面这个就是在不同的包中来继承
    //在testb包中的Dog类继承 了在testa包中的Animal类 之后再调用父类的方法
    //这样就会报编译错误
    package testb;
    import testa.Animal;
    public class Dog extends Animal{
    	public static void main(String[] args) {
    		Animal a=new Dog();
    	//compile error:The method crow() from the type Animal is not visible
    		a.crow();
    	}
    }
    

      

        关于clone()方法使用的时候正式类似于上面的情况,虽然clone()是在Object类中定义的方法,修饰符是protected,但是在自己写的类中(继承了Object类但不在同一个包下),如果想使用clone()方法,则一定要重新把它覆盖了,并且继承Cloneable接口,否则会有编译错误。具体可以参考这个:http://hxraid.iteye.com/blog/522171。

  • 相关阅读:
    HIVE 技巧积累之合并重叠日期
    记一次hive版本升级
    【转】elasticsearch中字段类型默认显示{ "foo": { "type": "text", "fields": { "keyword": {"type": "keyword", "ignore_above": 256} }
    【转】深入理解Linux修改hostname
    VMware中 CentOS7挂载windows共享文件夹
    Apache版hadoop编译
    No route info of this topic
    java遍历文件夹及所有子文件
    关闭spring整合kafka时,消费者一直打印kafka日志
    (转)详解shell中>/dev/null 2>&1到底是什么
  • 原文地址:https://www.cnblogs.com/Goden/p/3956829.html
Copyright © 2011-2022 走看看