package a;public class A {
public A() {};
protected void display(){};
}
--------------------------------------
package b;import a.A;public class B extends A{
public static void main(String[] args) {
B b = new B();
b.display();
A a = new A();
a.display(); //这行报错
}
}******************************
如果将程序修改:
package a;public class A {
public A() {};
protected static void display(){}; //加上static
}
------------------------------------------
package b;import a.A;public class B extends A{
public static void main(String[] args) {
B b = new B();
b.display();
A a = new A();
a.display(); //正常
}
}
为什么在类A的display()方法前加上static,就可以运行啦?请高手指教
public A() {};
protected void display(){};
}
--------------------------------------
package b;import a.A;public class B extends A{
public static void main(String[] args) {
B b = new B();
b.display();
A a = new A();
a.display(); //这行报错
}
}******************************
如果将程序修改:
package a;public class A {
public A() {};
protected static void display(){}; //加上static
}
------------------------------------------
package b;import a.A;public class B extends A{
public static void main(String[] args) {
B b = new B();
b.display();
A a = new A();
a.display(); //正常
}
}
为什么在类A的display()方法前加上static,就可以运行啦?请高手指教
解决方案 »
- 求关于动态变换圆点的程序
- 我用JAVA 连SQL 2000 总是报错误,麻烦大家帮忙看下,高手指点指点。
- java代码修改文件名
- 做项目遇到困难,关于组件的刷新问题,向朋友请教一下,衷心感谢! : )
- 请问那里有《数据结构与算法分析(Java版)》下载?
- 怎么获取类的大小
- 我从网上下载了一本名叫javabeandevelop的书 ,可是解压后发现尽是些.001 .002 .003文件,请问我要用什么东西才能看到内容?
- java 信手问题,通过编译,但是看不到我创建的包
- 在 win98 中如何使用 java
- 在swing中怎么重载tooltip
- GrerianCalendar类一个错误?
- 正则表达式如何匹配一段文本?
在第一种情况中,类B继承了类A和A的display()方法,所以在类B中B类型的对象可以调用自己的display()方法。
但类A的protected方法对其不同包子类B来说是不可见的,所以此protected方法对于B类中生成的A类型的对象也是不可见的
在第一种情况中,类B继承了类A和A的display()方法,所以在类B中B类型的对象可以调用自己的display()方法。
但类A的protected方法对其不同包子类B来说是不可见的,所以此protected方法对于B类中生成的A类型的对象也是不可见的正解
但是为什么加上static就可以了呢?
因为A类display()方法为protected的,所以在子类B中能使用,又因为A类的display()方法为静态方法,就表示
创建多个A类对象(包括子类对象),在内存中也只有一份存储空间,
所以b对象和a对象调用的是同一个display()方法。
我是这么理解的
在第一种情况中,类B继承了类A和A的display()方法,所以在类B中B类型的对象可以调用自己的display()方法。
但类A的protected方法对其不同包子类B来说是不可见的,所以此protected方法对于B类中生成的A类型的对象也是不可见的正解对于static,是因为static 是对于类来讲的,所以可以访问,我们所说的protected子类可以访问,说的是子类的对象,而且又是在子类里面。具备这样个才可以说是子类可以访问。对于static,他是对于类来说的。
package a.a;
class A {
public A() {};
protected void display(){};
}
public class B extends A{
public static void main(String[] args) {
B b = new B();
b.display();
A a = new A();
a.display();
}
} 那为什么这样又可以呢?
这么解释,从访问权限着来说:
protected的访问权限是同一包中的类和不同包的子类(的对象),而不同包中的子类可以访问它必须包含两个条件:
1,在子类中 2,是子类的对象
所以说,类A虽然在子类中,但是它不是子类的对象,它是父类的对象,所以,它没有访问权限,
从static这来说 当父类的成员声明为静态的时候 ,不管你创建多少对象,它只开辟一段内存,因为它是在创建对象之前开辟的,类可以直接访问,但是同时对象也可以访问,而你创建的对象,包括父类,当然也包括子类的对象,所以加上static后谁都可以访问,大概就是这么着理解吧
呢?