我是Java初学者,有两个可能很简单的问题想问大家,第一:我看书上说父类中private修饰的变量不能被子类继承,但是我看到有的例子中子类调用了父类的一个方法,虽然此方法是public的,但是这个方法里面有private修饰的变量。我的疑问是,既然子类没有继承这些变量,自己又没有声明,怎么能运行呢?还是子类能够和父类交流信息??不明白~
第二:没有创建类的实例也可以用类里面的信息吗?静态方法能够被继承吗??
第二:没有创建类的实例也可以用类里面的信息吗?静态方法能够被继承吗??
调试欢乐多
这种类成员应该是在类中声明的啊,怎么会跑到方法里面去。
本人认为 是 可以的,只不过你不能直接不使用它,通过public的方法使用它是可以的
既然子类没有继承这些变量,自己又没有声明,怎么能运行呢?
有继承的2.没有创建类的实例可以调用本类里的静态成员变量和方法。
静态方法能被继承但不能被重写。
第二个同意这个说法
但是好像 也可以 调用 本类里的 非静态的静态成员变量和方法, 有待于我查证一下
package basic;public class UseMethodBeforeCreate { /**
* @param args
*/
public static void main(String[] args) { Sub sub = new Sub();//1
sub.say();//5
}}class Sub extends Super {
Sub() {
System.out.println("sub_constructor()");//4
} void say() {//6
System.out.println("sub_say()");
}
}class Super {
Super() {
say();//2 对象还没被初始化,这些被重写的方法就被可以用了,不管对象有没有new出来
System.out.println("super_constructor()");//3 } void say() {
System.out.println("super_say()");
}
}
// 1子类构造的过程 先调用父类无参数的构造方法,2,3 然后再是4, 最后 5,6/*这个说的很对,对象还没被初始化,这些被重写的方法就被可以用了,不管对象有没有new出来
所以
Super() {
say();
System.out.println("super_constructor()");
这里已经可以调用say()方法了;
你new的是子类的对象, 就调用子类say()方法*/
这就说明
没有创建类的实例可以调用本类里的成员方法
至于变量嘛
这个好像是不行的
高手讨论~
继承只是说明在子类中有了父类中的一切
但是不能访问用private修饰的东西
当在子类中调用父类中public方法时 当此方法中有private变量时
Java首先会在子类本身中寻找此变量 但是这个类又没有权限访问 所以会自动到父类中寻找此变量 多以此方法是可以运行的
在子类继承父类的过程中,private修饰变量(属性)和方法是不被继承的,但是在创建对象时,父类中的所有属性都会被分配内存空间的(包括private属性),虽然子类不可以直接继承或者说是调用控制这些private属性,但是可以通过继承的其他方法来控制这些private属性的。
第二个问题:
首先,类(静态)方法和类属性是可以继承的。
对于类中的类饿方法,在该类被加载到内存中时,就分配了相应的入口地址,即使该类没有创建对象,也可以通过类名直接调用类方法(类方法也可以通过对象调用)。
小弟也是初学者,哪里说得不对,请各位见谅。