程序如下:
类A:
package cn;public class A {
protected void proMethod()
{
System.out.println("base protected method");
}
}A中有protected方法。B类为A类的子类(包名不同):package com;
import cn.A;;
public class B extends A{
public static void main(String[] args) {
A a = new A();
a.proMethod();
}
}以上B中的a.proMethod();出错。出错信息为:The method proMethod() from the type A is not visible为什么?protected方法不是可以对子类公开的吗?
类A:
package cn;public class A {
protected void proMethod()
{
System.out.println("base protected method");
}
}A中有protected方法。B类为A类的子类(包名不同):package com;
import cn.A;;
public class B extends A{
public static void main(String[] args) {
A a = new A();
a.proMethod();
}
}以上B中的a.proMethod();出错。出错信息为:The method proMethod() from the type A is not visible为什么?protected方法不是可以对子类公开的吗?
解决方案 »
- 如何在java JFrame中嵌套VC编写的exe界面程序
- java问题,哪位兄弟帮帮忙,先多谢了
- 时间想减,结果不对~但是程序感觉没错啊~可直接运行有人愿意帮看看吗?
- 高分求一个字符串拆分方法
- 求助,通过SSH协议登录linux服务器的程序
- 求教:关于多线程的问题
- 有谁能告诉我最后一句是什么意思啊?谢谢大哥们了
- 我的程序在editplus下能运行,但在命令行下不能运行
- oicq聊天机器人可以对着OICQ聊天室说个没完的家伙,据作者说,测试时有人不知道是程序,居然跟它聊
- class和他的实例变量的范围的问题。
- StringBuffer(int lenth)什么意思
- java网络传输中文字符的问题
protected 中对子类可见,这个没有错。
错在:类B和类A不在同一个包,同时,你是在main方法用类A生成的对象调用方法proMethod()
public static void main(String[] args) 这个方法是一个特殊的方法,是静态,只是给运一个类的入口。基本上不属于这个类。你的代码改为:
public static void main(String[] args) {
B a = new B();
a.proMethod();
}
就可以了,因为B已经继承了A中的这个方法
你的意思我大概明白了。
把B改为:
package com;
import cn.A;
public class B extends A{
A a = new A();
public void fn()
{
proMethod();
}
public static void main(String[] args) {
A a = new A();
//a.proMethod();
}
}
是可以的。
我理解为对子类公开 和 子类可以继承这个方法的意思是完全一致的。
我觉得你的说法中有点问题,请指教:
》》你是在main方法用类A生成的对象调用方法proMethod()
public static void main(String[] args) 这个方法是一个特殊的方法,是静态,只是给运一个类的入口。基本上不属于这个类。如果我用一个成员方法中,或者直接把A作为B的属性的话,调用A的对象的proMethod方法也是不可以的。所以我还是同意wzlsquall(亮亮)和sonyejin(和着音乐,一个球飞过来——新闻联播开始了) 。
对于编译器来讲编译器只知道B的超类是A,并不知道A有哪些子类.
在a看来,"我现在在一个与我的类毫不相干的类中,而且这个类和我还不在一个包内"
我觉得你的说法中有点问题,请指教:
》》你是在main方法用类A生成的对象调用方法proMethod()
public static void main(String[] args) 这个方法是一个特殊的方法,是静态,只是给运一个类的入口。基本上不属于这个类。如果我用一个成员方法中,或者直接把A作为B的属性的话,调用A的对象的proMethod方法也是不可以的。所以我还是同意wzlsquall(亮亮)和sonyejin(和着音乐,一个球飞过来——新闻联播开始了) 。
//==============================================
你的理解,和我想说的是有点偏差。
---protected 中对子类可见,这个没有错。
错在:类B和类A不在同一个包,同时,你是在main方法用类A生成的对象调用方法proMethod()
----我想说的,重点是上面这句。
--下面这句是想强调main是一个特殊方法,不过用在这里确实会引起这样的想法:
“是不是我不在main()方法中,而在别的方法中这样写就可以了”,这个是我的错
----
public static void main(String[] args) 这个方法是一个特殊的方法,是静态,只是给运一个类的入口。基本上不属于这个类。你的代码改为:
public static void main(String[] args) {
B a = new B();
a.proMethod();
}
就可以了,因为B已经继承了A中的这个方法