提问:在java中,用子类 new 出一个对象,那么父类是否也会被实例化?
1、当我们用 子类 去实例化一个对象时,父类会被实例化么?
答案是:父类不会实例化。
2、既然父类不会实例化,那么写在父类的 public 成员变量 、private 成员 怎么办?
例如:有一个成员变量,定义在父类中。这个list的成员变量在什么时候实例化?
public ArrayList list =new ArrayList<>();
我们知道,java中,一切皆对象。如果没有对象,就会抛出 空指针 。然而这个变量是定义在父类中的,
实例化的是子类,父类没有实例化啊。那么我子类去使用父类定义的对象时,会不会抛出空指针??
3、假如把public 改为 private 呢?
private ArrayList<String> list =new ArrayList<>();
我们都知道private 修饰的是私有属性,子类也是无法访问的。那么子类的实例里面,到底有没有给 list 这个成员创建对象呢?
继承只是代码上的为了减少代码的重复,减少无谓的代码逻辑。继承,相当于是复制父类的代码过来的。这样子类就具有父类的功能了,但是为了简化代码。
用子类去创建一个对象,虽然看起来,写在父类的成员变量不在子类中,但是,其实子类也实例化了该成员变量的。例如:
User user1=new User();
User user2=new User();
我们可以使用java中的== 等号 ,来判断这两个对象是同一个对象。
另外需注意一点:java 中的 String =“anmemem” 这种格式的字符串,它是放在常量池的。
只有 String string=new String ("") 这种方式才是生成一个新的实例。
访问修饰符——描述的是:类与类之间 的访问控制。运行时候,就是对象和对象之间的访问控制。
static 和 非static ——描述的是:变量是 类变量,还是实例变量。
如何理解: 子类实例化时,父类会先被加载?
结论:
继承只是一种语法!是为了减少重复代码而设计的。它的唯一目的就是减少重复代码。