刚学到继承这里,被super难住了。
在网上查资料,super代表父类对象的引用,但是 子类生成对象时 只是调用了父类的构造方法,并未生成父类对象,那么此时
super为什么能调用父类的方法,设定改方法被子类重写。
super既然调用了父类的方法,说明super就是父类对象的引用,但是又没生成父类的对象,那么此时super是怎么调用父类方法的?希望大家帮我分析下这个问题,谢谢。
在网上查资料,super代表父类对象的引用,但是 子类生成对象时 只是调用了父类的构造方法,并未生成父类对象,那么此时
super为什么能调用父类的方法,设定改方法被子类重写。
super既然调用了父类的方法,说明super就是父类对象的引用,但是又没生成父类的对象,那么此时super是怎么调用父类方法的?希望大家帮我分析下这个问题,谢谢。
举个例子类A时父类,B是子类
A中有123,B继承了A,并且添加了456
但是在电脑看来A包含123,吧、B包含123456.,在电脑看来,A和B没有关系
所以B中调用所谓的父类构造方法时,其实还是在自己本身
纯属个人见解,不知道对不对。如果不对就当我没说
http://bbs.csdn.net/topics/390836899
SUPER关键字调用了父类的构造方法,那么无论父类是否有其它构造方法,它都有一个无参的构造方法,而我们普通的创建对象,就是引用的无参构造方法。所以能够在子在中使用父类的方法。而且,子类继承父类的一切方法与关键字,可以重载,从关系上来说它们有关系,但其实子类和父类是两个完全独立的新类。不会因为修改了子类的方法或者属性而影响到父类。
后来,你又在房子设计1的基础上设计了“房子设计2”
除了房间1,你又另设计了一个房间(房间2),
于是现在这个房子设计2有两个房间了。
(但房子设计2图纸中只说明房间1的设计请参考房子设计1图纸,没有在房子设计2图纸中体现)现在,你将房子设计2图纸交给房产开发商,
房产开发商依房子设计2图纸盖了一个房子(对象实例)。上面的文字用代码来表现是类似这样子的:class HouseDesign1 {
private Room1 room1 = new Room1();
protected void enterRoom1(){}
}class HouseDesign2 extend HouseDesign1 {
private Room2 room2 = new Room2();
protected void enterRoom2(){}
}HouseDesign2 house = new HouseDesign2();这样,就有了house对象实例。一般来说,在软件领域,所谓对象实例是由new ClassName()或Class.newInstance()出来的,
因此LZ问的到底有没有生成父类对象,
就要看上面的例子中有没有new HouseDesign1()?我想答案很明显了吧,没有!
虽然house中既有room2也有room1,
但都是HouseDesign2的对象实例,
没有HouseDesign1的对象实例。LZ的问题“没生成父类的对象,那么此时super是怎么调用父类方法的?”
简单的说就是,子类实例中已包含了父类的一切(即room1)。
在house,room1是子类(HouseDesign2)实例中的(虽然是在父类图纸中设计的)。