4.32 继承中构造方法的注意事项

/*
如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
	报错。
如何解决呢?
	A:在父类中加一个无参构造方法
	B:通过使用super关键字去显示的调用父类的带参构造方法
	C:子类通过this去调用本类的其他构造方法
		子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。

注意事项:
	this(...)或者super(...)必须出现在第一条语句上。
	如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。
*/
class Father {
	/*
	public Father() {
		System.out.println("Father的无参构造方法");
	}
	*/

	public Father(String name) {
		System.out.println("Father的带参构造方法");
	}
}

class Son extends Father {
	public Son() {
		super("随便给");
		System.out.println("Son的无参构造方法");
		// super("随便给");
	}

	public Son(String name) {
		// super("随便给");
		this();
		System.out.println("Son的带参构造方法");
	}
}

class ExtendsDemo7 {
	public static void main(String[] args) {
		Son s = new Son();
		System.out.println("----------------");
		Son ss = new Son("李大仁");
	}
}
时间: 2024-10-07 15:43:21

4.32 继承中构造方法的注意事项的相关文章

Java 继承中构造方法的执行顺序问题

在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1.子类的构造方法中必须调用其基类的构造方法(显示或隐式) 1.1.若是显示调用,则可以通过 super(argument_list) 来调用,且super调用必须在首行以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化(this关键字可以调用本类中的其他构造器,也必须在首句,因此thi

57 面向对象继承中构造方法的关系

1 class Demo1_Extends{ 2 public static void main(String[] args) { 3 Dog d = new Dog(); 4 } 5 } 6 7 class Animals extends Object{ 8 public Animals(){ 9 super() // 默认继承 Object类 10 System.out.println("父类无参构造方法"); 11 } 12 } 13 14 class Dog extends A

继承中构造方法中关系

子类中所有的构造方法默认都会访问父类中空参数的构造方法 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类. 所有的构造方法的第一条语句默认是 super() ; Object: 是继承体系中的顶层父类,所有的类都是直接或者间接的继承该类 this(...) 和 super(...)构造方法不能同时存在 , 必须是构造方法的第一条语句 成员方法 : 查找顺序为: 先在本类中查找 , 如果没有上父类中查找 , 父类如果没有 ,就报错了 ; 父类没有无参构造方法,子类怎么

在继承中 构造方法的访问特点

上图第一点  如果父类没有默认的构造函数  子类就要通过第二点 去调用父类的构造方法 以为子类必须调用父类的构造方法 原文地址:https://www.cnblogs.com/wulinmiao/p/12113426.html

Java 继承中的构造方法

Java 继承中的构造方法 子类可以继承父类的构造方法,并遵循以下原则: 子类构造的构成中必须调用其基类的构造方法.    2.子类可以在自己的构造方法中使用super()调用基类的构造方法. 使用this()调用本类的另外的构造方法. 如果调用super(),必须写在子类构造方法的第一行. 3.如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参的构造方法.    4.如果子类的构造方法中既没有显示的调用基类的构造方法,而基类中又没有无参的构造方法,则编译会出错. 1 cla

继承中的自定义构造方法

1.继承中的自定义构造方法 不能在子类访问父类私有变量 @interface Person : NSObject @property int age; - (id)initWithAge:(int)age; @end @interface Student : Person @property NSString *name; - (id)initWithAge:(int)age andName:(NSString *)name; @end @implementation Student - (id

java之继承中的构造方法

继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argument_list)调用本类的另外构造方法.  2.2.如果调用super,必须写在子类构造方法的第一行. 3.如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法. 4.如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错. class

oc36--自定义构造方法在继承中的表现

// // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; @property NSString *name; /* 自定义构造方法: 其实就是自定义一个init方法 1.一定是对象方法 2.一定返回id/instancetype 3.方法名称一定以init开头 */ - (instancetype)initWithAge:(int)age; //- (inst

day4(继承、修饰符、方法的重写、super关键词、继承中的构造方法、object类、对象转型)

1.类的继承(extends)通过继承,子类自动拥有父类的所有成员(成员变量和成员发方法)一个子类只能有一个父类,一个父类可以派生多个子类 2.访问修饰符(private 默认 protected public )对于class的权限修饰只可以用public和defaultdefault只能被同一个包内部的类访问 3.方法的重写(override)在子类中可以根据需要对从父类中继承来的方法进行重写重写方法必须和被重写方法具有相同方法名称.参数列表和返回类型重写方法不能使用比被重写方法更严格的访问