这个包是公共的 file1 package lei; class A{ protected int i; }file2 import lei.A; class B extends A{ } class C extends B{ public static void main(String[] args){ B b=new B(); System.out.println(b.i); } } 编译发生错误
写错了 是 file1 package lei; public class A{ protected int i; }file2 import lei.A; class B extends A{ } class C extends B{ public static void main(String[] args){ B b=new B(); System.out.println(b.i); } }
sun规定的?啥时候的事?:)
不会吧,如果protected只能在同一包内使用的话,那他和默认的访问关键字有什么区别呢?
当然可以访问了//MySuper.java package zhoutest; public class MySuper{ protected int i=0; }//A.java import zhoutest.MySuper; public class A extends MySuper{ }//B.java public class B extends A{ public B(){ System.out.println("i="+i); }
public static void main(String args[] ){ B b=new B(); } }***result*** i=0
to yslfwww(阿澈) 你的例子是可以运行,但改一下的话 //MySuper.java package zhoutest; public class MySuper{ protected int i=0; }//A.java import zhoutest.MySuper; public class A extends MySuper{ }//B.java public class B extends A{
public static void main(String args[] ){ A b=new A(); System.out.println(b.i); } }就不行了,如何解释? 报错为 i has protected access in zhouTest
b.i当然不行了.i对于A,B来说都是protect的成员变量.这一点确实没有问题.但是protected的含义是: 1.对于子类而言,相当于public,也就是说父类的protected成员子类可以访问. 2.但对外是相当于private的.也就是说你不能写 A a = new A(); B b = new B(); int x = a.i;//不能访问 int y = b.i//也不能访问. 我想引入protected的原因也就是,本来i不想暴露出来,应该定义为private(在A中),但是,这样以来,子类(如B),要想访问i,也就需要通过get()set()之类的方法了.很不方便.于是一个界乎于private和public之间的protected就有用了. 对外边来说,他和private一样,是不可以访问的.但在子类里边,就像public一样,可以直接访问.
file1
package lei;
class A{
protected int i;
}file2
import lei.A;
class B extends A{
}
class C extends B{
public static void main(String[] args){
B b=new B();
System.out.println(b.i);
}
}
编译发生错误
是
file1
package lei;
public class A{
protected int i;
}file2
import lei.A;
class B extends A{
}
class C extends B{
public static void main(String[] args){
B b=new B();
System.out.println(b.i);
}
}
package zhoutest;
public class MySuper{
protected int i=0;
}//A.java
import zhoutest.MySuper;
public class A extends MySuper{
}//B.java
public class B extends A{
public B(){
System.out.println("i="+i);
}
public static void main(String args[] ){
B b=new B();
}
}***result***
i=0
你的例子是可以运行,但改一下的话
//MySuper.java
package zhoutest;
public class MySuper{
protected int i=0;
}//A.java
import zhoutest.MySuper;
public class A extends MySuper{
}//B.java
public class B extends A{
public static void main(String args[] ){
A b=new A();
System.out.println(b.i);
}
}就不行了,如何解释?
报错为
i has protected access in zhouTest
1.对于子类而言,相当于public,也就是说父类的protected成员子类可以访问.
2.但对外是相当于private的.也就是说你不能写
A a = new A();
B b = new B();
int x = a.i;//不能访问
int y = b.i//也不能访问.
我想引入protected的原因也就是,本来i不想暴露出来,应该定义为private(在A中),但是,这样以来,子类(如B),要想访问i,也就需要通过get()set()之类的方法了.很不方便.于是一个界乎于private和public之间的protected就有用了.
对外边来说,他和private一样,是不可以访问的.但在子类里边,就像public一样,可以直接访问.