`
QI程序猿
  • 浏览: 16991 次
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java中关于子类和父类构造方法的小问题

 
阅读更多

看到一句话:子类的构造方法,不管这个方法带不带参数,默认地它都会去寻找父类的不带参数的构造方法,如果父类没有不带参数的构造方法,那么子类必须要用super关键字来调用父类的构造方法,否则编译不能通过。

 

父类:

 

class Parent {

	private String name;

	public Parent(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

 

子类:

 

class Child extends Parent {
	private String name;

	public Child() {
		super("");
	}

	public Child(String name) {
		super("");
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

此处父类是没有定义无参构造方法的,只有有参构造方法(如果有参构造方法删掉,系统会默认为类构造方法为无参的),此时如果在子类的无参和有参的构造方法里面没有super关键字来调用父类的有参构造方法,系统将会编译出错。

 

总结:参考文章链接

任何类,都会调用父类的构造方法,如果子类中没有显示地调用,则默认调用父类无参的构造方法,否则必须手工写上调用哪个,而且是在第一行。

 

@为什么子类构造方法一定要调用父类的构造方法?

子类继承了父类的属性和方法,子类要用父类的属性和方法,就要先初始化父类,这就要调用到父类的构造方法了。

 

@如果父类有一个属性是private,那子类还有这个属性吗?

子类继承后,这个经过父类初始化后的属性就是子类自己的了,子类虽然不能访问父类的私有属性,但是可以操作父类初始化后给他的这个属性。

 

@子类和父类有同名属性

如果同名同类型,子类会覆盖父类同名的属性,父类初始化该属性的值将不会影响子类

 

@子类和父类有同名方法

如果同名方法返回值和形参都相同,子类方法将替代父类方法

如果同名方法返回值不同,形参相同,那么该方法将不被允许,因为这相当于在子类中同时有了两个方法名和形参值相同的方法

其余情况均相当于在子类方法中多出了几个重载方法

分享到:
评论

相关推荐

    java中的继承(子类调用父类构造方法还不懂).doc

    java中的继承(子类调用父类构造方法还不懂).doc

    子类引用父类构造方法

    java训练题目 编写程序实现子类对父类构造方法的引用?

    Java的子类调用父类的构造方法.pdf

    Java的子类调用父类的构造方法.pdf

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    Java面向对象总结

    1.子类继承父类就拥有了父类的属性和方法。(代码的可重用) !!!父类的构造方法子类不能...如果要在子类的构造方法中显式调用父类的构造方法。使用super(参数列表),但是这行代码必须是在 子类的构造方法的第一行。

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。

    java 简述父与子类的关系及构造方法

    适用初学者学习java,用代码方式及代码注释简单讲述父类与子类的关系及构造方法,通俗易懂。边操作便理解。

    C++/JAVA/C#子类调用父类函数情况总结

    1.1同一个类中构造函数调用构造函数 尽量不要这样做,因为结果不确定!避免麻烦 可以把共用的代码封装成一个私有的成员函数,然后在构造函数内统一调用。 1.2子类构造函数调用基类构造函数 —–基类有默认构造函数...

    抽象、多态、继承.zip

    java语言中,用abstract 关键字来修饰...子类不能继承父类的构造方法。 子类通常比父类的功能更多(子类更具体,父类更通用) 在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。

    Java程序设计C实验课题(5th)

    编写一个java程序,设计一个汽车类Vehicle,...声明一个父类A,它只有一个非默认构造方法,声明A的子类B,B具有默认构造方法及非默认构造方法,并在B的构造方法中调用基类A的构造方法。编写测试方法生成B的实例并观察结

    JAVA经典继承与父类调用 geter、seter访问器 构造器

    代码中设计了各个类的基类,设置私有成员变量,利用构造器对成员变量初始化,用geter、seter访问器设置、获取成员变量的值。继承基类并创建对象,在子类中调用父类方法。

    【Java基础】怎么理解父类引用能指向子类对象?

    因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造方法,由于s中包含了父类的实例,所以s可以调用父类的方法。 下面我们来看一下代码:

    Java中this与super的区别

    在构造方法中this与super不能共存;其次有this或super出现的地方必须是构造方法的第1句; 静态方法,也就是类方法中不能有this和super关键字 1. 子类的构造函数如果要引用super的话,必须把super放在函数...

    java三大特性说明

     要么在声明时候赋值,要么在构造方法中赋值,两次机会只能选取一次。  修饰方法 :final方法子类不能将其重写    修饰类:该类不能有子类  Static:修饰属性:静态属性是类所有实例共有,可以用”类名.属性”的...

    JAVA 课程实验设计

    编写一个java程序,设计一个汽车类Vehicle,包含的属性有车轮的...G-20 声明一个父类A,它只有一个非默认构造方法,声明A的子类B,B具有默认构造方法及非默认构造方法,并在B的构造方法中调用基类A的构造方法。编写测试

    大连理工大学Java小学期华为云作业答案

    子类继承父类,使用super调用父类构造方法,根据提示输入字符串,输出结果。 根据提示信息,输入移到、联通的手机号打印 利用多态性质,父类调用子类方法,定义一个移动卡、联通卡,手机类继承父类。实现动态调用,...

    孙卫琴Java讲座孙卫琴Java讲座

    孙卫琴Java讲座jav面向对象思想声明构造方法的语法规则 重载构造方法,参见Employee.java 默认构造方法, 参见Sample1.java 子类调用父类的构造方法,参见Son.java

    java中继承的使用案例

    (2)学生类Student继承Person,增加了学号信息,有两个构造方法Student()和Student(姓名,性别,年龄,学号),调用父类Person的构造方法对父类部分进行构造,在Student()中,默认学号为空字符串,在Student...

    由浅入深详解Java 类的实例化顺序

    在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通...

    java基础.txt

    而且this()必须放在构造方法中的第一行 封装 :隐藏内部的实现细节,对外提供公共的接口 123456789101112131415161718192021222324252627282930313233343536373839 继承 继承:extends 拓展和延伸 子类对...

Global site tag (gtag.js) - Google Analytics