继承问题

野树林 2012-12-28 08:21:13
1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。
请帮忙看看哪个正确,错误!谢谢!!!
...全文
449 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
brucehu1990 2013-01-21
  • 打赏
  • 举报
回复
引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。 2.子类必须通过super关键字调用父类的构造函数。 3.子类无法继承父类的构造函数。 “1.子类无条件地继承父类不含参数的构造函数。” 构造函数不是被“继承”的,而是被层层调用的。 子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……
受教了,谢谢
低头思蚊香 2013-01-21
  • 打赏
  • 举报
回复
java允许用“new 构造方法()”调用构造方法,所以2是错的,1和3没法用程序验证但是让我选的话我选3是对的
  • 打赏
  • 举报
回复
引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。 2.子类必须通过super关键字调用父类的构造函数。 3.子类无法继承父类的构造函数。 “1.子类无条件地继承父类不含参数的构造函数。” 构造函数不是被“继承”的,而是被层层调用的。 子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……
受教了,一开始我个人认为是第二个正确的,看了解析后恍然大悟!我误解了子类调用父类的构造方法就必须使用super关键字,其实在子类进行new的时候就会默认你调用父类中无参数的构造方法!
win_top1 2013-01-21
  • 打赏
  • 举报
回复
1.错 2.对 3.对
Danvie 2013-01-21
  • 打赏
  • 举报
回复
引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。 2.子类必须通过super关键字调用父类的构造函数。 3.子类无法继承父类的构造函数。 “1.子类无条件地继承父类不含参数的构造函数。” 构造函数不是被“继承”的,而是被层层调用的。 子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……
高手,学习
guo1054522381 2013-01-21
  • 打赏
  • 举报
回复
3是正确的 1.子类无条件地继承父类不含参数的构造函数。 2.子类必须通过super关键字调用父类的构造函数。 3.子类无法继承父类的构造函数。
Allen_Luo 2013-01-02
  • 打赏
  • 举报
回复
i_Programmer 2013-01-02
  • 打赏
  • 举报
回复
子类不会获得父类的构造函数(即子类不能继承父类的构造器),但是子类构造器里可以调用父类构造器中的初始化代码,而且不管我们有没有使用super来调用(注意:这里是“调用”,不是"继承")父类的构造器,子类构造器都会调用构造器一次(隐式或显式调用) 显式调用父类构造器:
class Parent{
	private String name;
	private int age;
	
	public Parent(String name, int age){
		setName(name);
		setAge(age);
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return age;
	}
}
class Child extends Parent{
	private String school;
	public Child(String name, int age, String school){
		//用super关键字显式调用父类构造器
		super(name, age);
		this.school = school;
	}
	public void setSchool(String name){
		this.school = school;
	}
	public String getSchool(){
		return school;
	}
}
public class InheritDemo{
	public static void main(String[] args){
		Child ch = new Child("zhou", 21, "MIT");
		System.out.println("name = " + ch.getName() + "\n" + "age = " + ch.getAge() + "\n" + "school = " + ch.getSchool());
	}
}
输出结果:

name = zhou
age = 21
school = MIT
下面是隐式调用父类的构造器:
class SuperClass{
	public SuperClass(){
		//初始化内容
		System.out.println("do something in superclass.....");
	}
}
class SubClass extends SuperClass{
	public SubClass(){
		System.out.println("do something in subclass....");
	}
}
public class Inherit{
	public static void main(String[] args){
		SubClass sc = new SubClass();
	}
}
执行结果:

do something in superclass...
do something in subclass....
从输出结果可以看出来,在子类构造器中并没有显式调用父类的构造器,但是父类构造器中的内容仍然被打印出来,说明系统会在执行子类构造器之前,隐式调用父类的构造器。而且父类的构造器总会在子类构造器之前执行. 所以相对来说,3是正确的,1、2是错误的。
Magician-CH 2013-01-02
  • 打赏
  • 举报
回复
1,2是错的,3是正确的,子类不能继承但可以调用父类的构造方法,如果不显式调用会自动调用没有参数的构造方法,所以不一定非要用super显式调用
别看WO太多 2013-01-02
  • 打赏
  • 举报
回复
3正确,其他错
fiona_zdh 2013-01-01
  • 打赏
  • 举报
回复
引用 2 楼 jia20003 的回复:
1在Java语言中正确! 2,3错误 父类 Java code ? 123456 public class PClass { public PClass() { System.out.println("PClass instanced"); } } 子类: Java code ? 123456789……
请问父类的构造方法System.out都在什么情况下输出呢,请高手指教下
Candylibin 2012-12-30
  • 打赏
  • 举报
回复
构造方法是将你的参数传递给父类的构造函数,不算继承
a_9_5_2_7 2012-12-30
  • 打赏
  • 举报
回复
super关键字是调用父类方法的不是构造方法 所以3是对的
raistlic 2012-12-30
  • 打赏
  • 举报
回复
引用 楼主 aazbc 的回复:
1.子类无条件地继承父类不含参数的构造函数。 2.子类必须通过super关键字调用父类的构造函数。 3.子类无法继承父类的构造函数。
“1.子类无条件地继承父类不含参数的构造函数。” 构造函数不是被“继承”的,而是被层层调用的。 子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。 “2.子类必须通过super关键字调用父类的构造函数。” 子类必须调用父类的构造函数,但不一定非要写出 super(...); 用 super 来调用父类构造函数必须放在子类构造函数的第一句。 没有用 super 显式调用的时候,第一句有一个默认的隐藏的调用 super(); “3.子类无法继承父类的构造函数。” 就“继承”的定义来说,这句话挑不出什么错误。
xtfgy2012 2012-12-29
  • 打赏
  • 举报
回复
引用 8 楼 jia20003 的回复:
其实整个概念错误,继承是对类来说的 重载与重写是对方法而言,构造函数继承的概念本身就是不知所云的味道! 还有什么对错可言! 那个说3正确的,你见过继承方法而不是类的嘛/?
我觉得你有点鸡蛋里挑骨头的问道,真是用心计较般般错啊 平常继承的时候,我们都说:子类继承了父类的属性和方法,如果不是这样说 请问父类还有什么东西可以被继承,难道就剩下个类的概念让别人继承? 照你这样的逻辑,我们平常说的都错了
gloomyfish 2012-12-29
  • 打赏
  • 举报
回复
其实整个概念错误,继承是对类来说的 重载与重写是对方法而言,构造函数继承的概念本身就是不知所云的味道! 还有什么对错可言! 那个说3正确的,你见过继承方法而不是类的嘛/?
ceclinux 2012-12-28
  • 打赏
  • 举报
回复
构造方法那个不叫继承
LCore 2012-12-28
  • 打赏
  • 举报
回复
说的很清楚了,只有3正确 构造方法是不能被继承的 只是会存在继承中的构造原则问题 原则基本就是楼上的总结的
xtfgy2012 2012-12-28
  • 打赏
  • 举报
回复
引用 2 楼 jia20003 的回复:
1在Java语言中正确! 2,3错误 父类 Java code?123456public class PClass { public PClass() { System.out.println("PClass instanced"); }} 子类: Java code?123456789101112131415161718192021……
1是错误的,如果父类有带参数的构造函数,没有无参的构造,就不存在继承无参数的 2也是错误的,因为无参数的情况下,父类的构造函数被隐性地调用了,并不需要显示调super
devil_may_care 2012-12-28
  • 打赏
  • 举报
回复
1错误,2,3正确 子类不能继承父类的构造方法。子类如果想继承父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,并且super语句必须是构造方法中的第一句。
加载更多回复(3)

62,612

社区成员

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

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