当前位置:编程学习 > JAVA >>

继承问题

1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。
请帮忙看看哪个正确,错误!谢谢!!! --------------------编程问答-------------------- 1,2错误
3正确 --------------------编程问答-------------------- 1在Java语言中正确!
2,3错误
父类
public class PClass {

public PClass() {
System.out.println("PClass instanced");
}
}

子类:
public class CClazz extends PClass {
private String titleName;
public CClazz() {
System.out.println("CClazz instanced...");
}

public CClazz(String name) {
this();
titleName = name;
}

public void printTitle() {
System.out.println(titleName);
}

public static void main(String[] args)
{
CClazz cc = new CClazz();
cc.printTitle();
CClazz cc1 = new CClazz("test");
cc1.printTitle();
}
}

测试结果:
PClass instanced
CClazz instanced...
null
PClass instanced
CClazz instanced...
test
--------------------编程问答-------------------- win7 + JDK6u30调试通过 --------------------编程问答-------------------- 1错误,2,3正确
子类不能继承父类的构造方法。子类如果想继承父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,并且super语句必须是构造方法中的第一句。 --------------------编程问答--------------------
引用 2 楼 jia20003 的回复:
1在Java语言中正确!
2,3错误
父类
Java code?123456public class PClass {     public PClass() {        System.out.println("PClass instanced");    }}
子类:
Java code?123456789101112131415161718192021……


1是错误的,如果父类有带参数的构造函数,没有无参的构造,就不存在继承无参数的
2也是错误的,因为无参数的情况下,父类的构造函数被隐性地调用了,并不需要显示调super --------------------编程问答-------------------- 说的很清楚了,只有3正确

构造方法是不能被继承的

只是会存在继承中的构造原则问题
   原则基本就是楼上的总结的
    --------------------编程问答-------------------- 构造方法那个不叫继承 --------------------编程问答-------------------- 其实整个概念错误,继承是对类来说的
重载与重写是对方法而言,构造函数继承的概念本身就是不知所云的味道!
还有什么对错可言!

那个说3正确的,你见过继承方法而不是类的嘛/?
--------------------编程问答--------------------
引用 8 楼 jia20003 的回复:
其实整个概念错误,继承是对类来说的
重载与重写是对方法而言,构造函数继承的概念本身就是不知所云的味道!
还有什么对错可言!

那个说3正确的,你见过继承方法而不是类的嘛/?


我觉得你有点鸡蛋里挑骨头的问道,真是用心计较般般错啊
平常继承的时候,我们都说:子类继承了父类的属性和方法,如果不是这样说
请问父类还有什么东西可以被继承,难道就剩下个类的概念让别人继承?
照你这样的逻辑,我们平常说的都错了 --------------------编程问答--------------------
引用 楼主 aazbc 的回复:
1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。


“1.子类无条件地继承父类不含参数的构造函数。”

构造函数不是被“继承”的,而是被层层调用的。
子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。


“2.子类必须通过super关键字调用父类的构造函数。”

子类必须调用父类的构造函数,但不一定非要写出 super(...);
用 super 来调用父类构造函数必须放在子类构造函数的第一句。
没有用 super 显式调用的时候,第一句有一个默认的隐藏的调用 super();


“3.子类无法继承父类的构造函数。”

就“继承”的定义来说,这句话挑不出什么错误。 --------------------编程问答-------------------- super关键字是调用父类方法的不是构造方法  所以3是对的 --------------------编程问答-------------------- 构造方法是将你的参数传递给父类的构造函数,不算继承 --------------------编程问答--------------------
引用 2 楼 jia20003 的回复:
1在Java语言中正确!
2,3错误
父类


Java code
?



123456

public class PClass {       public PClass() {         System.out.println("PClass instanced");     } }
子类:


Java code
?



123456789……

请问父类的构造方法System.out都在什么情况下输出呢,请高手指教下 --------------------编程问答-------------------- --------------------编程问答-------------------- 3正确,其他错 --------------------编程问答-------------------- 1,2是错的,3是正确的,子类不能继承但可以调用父类的构造方法,如果不显式调用会自动调用没有参数的构造方法,所以不一定非要用super显式调用 --------------------编程问答--------------------
子类不会获得父类的构造函数(即子类不能继承父类的构造器),但是子类构造器里可以调用父类构造器中的初始化代码,而且不管我们有没有使用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是错误的。 --------------------编程问答-------------------- 3是正确的
1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。 --------------------编程问答--------------------
引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。

“1.子类无条件地继承父类不含参数的构造函数。”

构造函数不是被“继承”的,而是被层层调用的。
子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……


高手,学习 --------------------编程问答-------------------- 1.错
2.对
3.对 --------------------编程问答--------------------

引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。

“1.子类无条件地继承父类不含参数的构造函数。”

构造函数不是被“继承”的,而是被层层调用的。
子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……



受教了,一开始我个人认为是第二个正确的,看了解析后恍然大悟!我误解了子类调用父类的构造方法就必须使用super关键字,其实在子类进行new的时候就会默认你调用父类中无参数的构造方法! --------------------编程问答-------------------- java允许用“new 构造方法()”调用构造方法,所以2是错的,1和3没法用程序验证但是让我选的话我选3是对的 --------------------编程问答--------------------
引用 10 楼 raistlic 的回复:
引用 楼主 aazbc 的回复:1.子类无条件地继承父类不含参数的构造函数。
2.子类必须通过super关键字调用父类的构造函数。
3.子类无法继承父类的构造函数。

“1.子类无条件地继承父类不含参数的构造函数。”

构造函数不是被“继承”的,而是被层层调用的。
子类的构造函数必须调用父类的某个构造函数,这个调用一直延伸到 Object 类的无参构造函数。……
受教了,谢谢
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,