日期:2014-05-20 浏览次数:20635 次
class A{
private int i = 10;
private String str1 = "abc";
private void method(){
System.out.println("父类中的private方法");
}
}
class B extends A{
}
public class TestExtends {
public static void main(String[] args) {
B b = new B();
}
}
这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。
那我想问下:到底内存中为private的属性和方法分配了空间么?
这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。
那我想问下:到底内存中为private的属性和方法分配了空间么?
当然分配了。
我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?
这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。
那我想问下:到底内存中为private的属性和方法分配了空间么?
当然分配了。
我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?
这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。
那我想问下:到底内存中为private的属性和方法分配了空间么?
当然分配了。
我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?
但是通过反射又是可以访问到私有属性的,说明还是加载进来的吧
恩,我只是简单了解反射有这个功能,但是这个要怎么用反射来实现证明呢?
这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。
那我想问下:到底内存中为private的属性和方法分配了空间么?
当然分配了。
我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?