子类在实例化时,会自动调用父类的构造函数,那请问:会实例化一个父类的对象吗?

sshjava1 2016-06-28 11:16:03
首先创建一个子类对象,然后调用父类构造函数,将从父类继承过来的成员变量进行初始化,然后用子类的构造函数初始化成员变量------------------------是这样的吗?

问题是:如果父类中有不能被继承的成员变量,那么在子类的构造函数中用super(参数1,参数2)调用父类的构造函数时,仍然会通过super向不能被继承的成员变量赋值,可是有什么意义吗?


package chaper2;

public class Animal {
String name;
private int age;

public Animal(String n,int a) //父类的构造函数
{
name=n;
age=a;
}
}

package chaper2;

public class Dog extends Animal {
int weight;

public Dog() //子类的构造函数
{
super("kitty",10); //调用父类的构造函数,将父类中的私有变量age赋值为10 ,有什么意义吗?
weight=20;
}
}
...全文
5217 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
天之上有什么 2017-11-28
  • 打赏
  • 举报
回复
不会实例化父类对象,只实例化子类对象,父类中的私有属性是为了隐藏具体的细节,但是能通过子类的方法进行操作
Clumsy__Cat 2017-11-27
  • 打赏
  • 举报
回复
不会实例化一个父类对象
pauliuyou 2017-11-23
  • 打赏
  • 举报
回复
子类继承父类所有属性, 包括私有的。 所以在子类对象中是包含这些数据的, 只是因为是私有的,不能在子类中直接访问, 需要通过从父类继承的公共方法间接访问, 父类构造器也是一个特殊方法,所以通过调用父类构造方法就可以完成从父类继承的私有属性的初始化工作。
qq_14935645 2017-11-10
  • 打赏
  • 举报
回复
假如父类可继承的方法中有使用私有的属性,那通过调用父类构造函数进行初始化时自然起到作用。
解开者 2016-06-28
  • 打赏
  • 举报
回复
不会实例化父类对象,一共只产生一个对象
netepic 2016-06-28
  • 打赏
  • 举报
回复
绝对不会实例化父类对象。父类的私有变量不能被子类直接访问,但子类对象还是会为这些私有变量分配内存空间,但只是必须得通过父类的方法来访问。
gamedev˚ 2016-06-28
  • 打赏
  • 举报
回复
在子类中可以通过父类的对象调用父类的非私有属性,或者 通过调用父类的构造器方法,来进行属性的赋值,而对于父类的私有化属性,在子类中只能通过调用父类的构造器对其进行赋值,不能通过父类的对象调用父类的私有化属性。这就是为什么要用super对父类私有化属性进行赋值的作用。
sky_08_06_02 2016-06-28
  • 打赏
  • 举报
回复
这样赋值完了,我也感觉不出有什么意义
爱睡觉的阿狸 2016-06-28
  • 打赏
  • 举报
回复
你在子类的构造方法中调用父类的构造方法当然是可以的,同样父类的构造方法对它自己的属性赋值当然可以。 好比你private String a; 再写两个getter和setter方法,这里我不写了。你在其他的类中通过setter和getter对a进行赋值和取值都是可以的,一个道理。说白了就是你类的作者允许其他类通过本类提供的方法对类的私有属性进行赋值和取值,你觉得没必要,你就别提供好了。 子类通过父类提供的构造方法间接的对父类私有属性进行赋值,说白了就是你父类提供了此类方法,也就是父类允许子类对自己的私有属性进行间接操作。如果你觉得没有意义,那你就别提供这样的构造方法就好了。
小灰狼 2016-06-28
  • 打赏
  • 举报
回复
不会,只生创建一个子类对象 调用父类构造器是要完成对父类逻辑中的初始化工作而已

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧