JAVA访问控制符问题--父类子类不在同一个包内的Prote...29
发布网友
发布时间:2024-02-26 02:48
我来回答
共5个回答
热心网友
时间:2024-09-30 01:33
弄了半天终于整明白了。。
protected的意思是本包可以访问..子类可以继承..
某类的protected 方法和属性在包外是不能通过该类对象进行访问的(你能在包外访问一个类的默认权限的方法和属性吗?当然不能),这就是为什么在某对象所在的包的以外的任何地方,你不可以通过该类的对象引用来调用它的protected 方法和属性,哪怕是在该类的子类中也不可以这样做。在该类包外的子类中能“看到“的只是子类自己继承来的protected 方法和属性,它是不能“看到“它的父类对象的protected方法和属性的。
也就是说你可以new 子类然后子类对象.protected属性..但是这样实际上访问的是子类继承来的属性..并不是父类的属性..
热心网友
时间:2024-09-30 01:37
类的成员方法有实例方法和类方法之分
static方法也叫类方法或者静态方法,类方法体中只能访问类变量,
类方法既可以通过对象来调用,也可以通过类名来调用.
实例方法体中既可以访问类变量,也可以访问实例变量.实例方法只能通过对象调用.
热心网友
时间:2024-09-30 01:34
因为你的main方法是静态的 静态中是不能访问非静态的所有属性和方法 所以你只能在非静态中去使用对象a的protected属性 访问的时候一定要用super.protected因为这样才是在同一个包中 如果你用a.protected是不能访问的 因为new 的话 就不是在同一个包中
E继承于A所以super.protected 是同一个包中的
new 的包就是不在同一个包中
热心网友
时间:2024-09-30 01:36
静态方法不能访问非静态成员变量
热心网友
时间:2024-09-30 01:35
因为a是new出来的对象,其实相当于在对象a外部调用a的protected属性,当然是不可以的,楼上几位说的不对,即使把static void main(String[] args)改成void f(),a.intProtected也会报错,protected只能是同一包内或者子类对象,new出来的对象是不可以的,至于e.intProtected可以访问是因为在同一个包里
至于a.intProtectedStactic可以访问是因为intProtectedStactic是static类型,是针对类而不是对象,又因为E extends A,所以在intProtectedStactic其实指向的是同一块内存地址(共用一块内存地址),a.intProtectedStactic和e.intProtectedStactic值是一样的,你可以在你的程序最后判断一下。a.intProtectedStactic相当于访问E.intProtectedStactic