我不大理解protected 请指教

zjfzju 2003-10-09 05:54:03
是不是父类可以访问子类的protected成员
还是子类可以访问父类的protected成员
还是两种情况都可以
...全文
82 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjfzju 2003-10-10
  • 打赏
  • 举报
回复
protected 能被同一个包里的类和子类访问
package 能被同一个包里的类访问
如果子类与父类要在同一个包内
那么 protected和package就没什么区别了
CD2 2003-10-10
  • 打赏
  • 举报
回复
你的问题“那么protected和package有什么区别呢“不明白是什么意思?两个概念
zjfzju 2003-10-10
  • 打赏
  • 举报
回复
我来up一下
collision 2003-10-10
  • 打赏
  • 举报
回复
内部类不可以使用!
Mars_wx 2003-10-10
  • 打赏
  • 举报
回复
public class B extends A
{
int j;
void T(A a)
{
a.i=10;
}
}
如果B继承了A就能访问A中的protected变量或者方法,
你在A中定义了i,如果你想用A中的i直接用就可以了
不用像你那样a.i

zjfzju 2003-10-10
  • 打赏
  • 举报
回复
我试了
位于不同包的类试可以继承的
如:
//B.java
package b;

import a.A;

public class B extends A
{
protected int j;
}

//A.java

package a;

public class A
{
protected int i;
}

如果只能在同一个包中继承
那么protected和package有什么区别呢
他们都能由同一个包中的类访问
tripofdream 2003-10-10
  • 打赏
  • 举报
回复
可以作参数

//B.java
package b;
import A.A;
public class B extends A
{

int j;

void t(A a)
{
a.i=10;
}

public static void main(String[] args){
B b = new B();
A a = new A();
b.t(a);
}

}
zjfzju 2003-10-10
  • 打赏
  • 举报
回复
那为什么不能作为参数呢?
tripofdream 2003-10-10
  • 打赏
  • 举报
回复
//B.java
package B;
import A.A;
public class B extends A
{
int j;
void T()
{
//创建类A的实例
A a = new A();
a.i=10;
}
}
CD2 2003-10-10
  • 打赏
  • 举报
回复
我是他的亲戚当然可以用了,否则他就用private所在箱子里了。protected的东西是可以用的。
chanceqw 2003-10-10
  • 打赏
  • 举报
回复
如果是面向对象的观点,你站在A的立场上,既然protected的东西,显然他不愿意让别人用,虽然你是他的亲戚,随便动他的东西也不好吧。
反正我是养成了良好的习惯,别人不让动的我坚决不动,除非别人告诉我
public void 这个你可以用(){
用;
}
人家都小气鬼一个,东西都protected了,何必自找没趣呢
CD2 2003-10-10
  • 打赏
  • 举报
回复
//class A
package zjfzju.a;
public class A
{
void csdn(){
System.out.println("第十期的程序员不要买,我已经上当了");
}
}

import zjfzju.a.*;
---------------------------------------
//class B
public class B extends A {
public B(){}
public static void main(String args[]){
B bb=new B();
bb.csdn();//如果class A 里的method csdn()是friendly or private就无法调用,如果用public那么所有的类都可以调用(单是这样有时候不安全,所以用protected,only desderived classes can transfer it
}
}
睡觉了!祝你在java的道路上进步的快一些
zjfzju 2003-10-10
  • 打赏
  • 举报
回复
是啊
我就是这个意思
为什么不能访问呢?
CD2 2003-10-10
  • 打赏
  • 举报
回复
The next access level specifier is protected, which allows the class itself, subclasses,and all classes in the same package to access the members.
这句话和“protected 就是我的东西只有和我一伙的或者我儿子能用“是一个道理!
你的程序有很多问题:
一:包名需要小写
二:两个编译单元(A 和B)位于不同的package中,似乎不能继承,如果要继承就放在同一个package中
三:如果要调用不同包里的变量或方法,改变两或方法必须为public
//A.java
package A;//包名要小写(规范编码)
public class A//类名最好不要和包名一致
{
protected int i;//这里的访问权限因为public

}

//B.java
package B;//up
import A.A;
public class B extends A//不在同一个包里不存在extends
{
int j//没有初始化
void T(A a)
{
a.i=10;
}
}
我写了一个写的例子帮你理解包和访问权限的含义
//class A
package zjfzju.a;
public class A
{
int k=20;
public A(int i){
i=10;
System.out.println(i);
}
}

import zjfzju.a.*;
---------------------------------------
//class B
public class B {
public static void main(String args[]){
int j=0;
int k=0;
A aa=new A(j);
System.out.println(aa.k);
}
}
tripofdream 2003-10-10
  • 打赏
  • 举报
回复
回复人: zjfzju(zjf) ( ) 信誉:100 2003-10-09 18:25:00 得分:0


我试了,为什么下面这段程序编译有错误
编译器说a.i无法访问
//A.java
package A;
public class A
{
protected int i;

}

//B.java
package B;
import A.A;
public class B extends A
{
int j;
void T(A a)
{
a.i=10;
}
}


a初始化了吗?
zjfzju 2003-10-09
  • 打赏
  • 举报
回复
我来up一下
Mars_wx 2003-10-09
  • 打赏
  • 举报
回复
关注!
zjfzju 2003-10-09
  • 打赏
  • 举报
回复
java Tutorial里有这样一句话不知该如何理解
The next access level specifier is protected, which allows the class itself, subclasses,and all classes in the same package to access the members.
binny 2003-10-09
  • 打赏
  • 举报
回复
protected 就是我的东西只有和我一伙的或者我儿子能用


void T(A a)
{
a.i=10;
}

这样不行,你试试这样:

void T(A a)
{
i=10;
}




zjfzju 2003-10-09
  • 打赏
  • 举报
回复
我试了,为什么下面这段程序编译有错误
编译器说a.i无法访问
//A.java
package A;
public class A
{
protected int i;

}

//B.java
package B;
import A.A;
public class B extends A
{
int j;
void T(A a)
{
a.i=10;
}
}
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧