Java中的有参无参构造方法与继承的关系

public class Father {
	 //年龄  
    private int age;  
    //仅有一个带参数的构造方法  
    public Father (int i){  
    	this.age = i;  
    	System.out.println("实例化父类 ag = " + age);  
    }  
    public Father() {
    	System.out.println("这是父类的无参的构造方法");  
    	// TODO Auto-generated constructor stub
    }
    //main方法  
    public static void main (String []  args) {  
    	//实例化对象时必须指定参数以运行对应的构造方法实例(构造)对象  
    	Father fa = new Father(40);  
    	Father fa1 = new Father(50); 
    	Father fa2 =new Father();
    }  
}


实例化父类 ag = 40
实例化父类 ag = 50
这是父类的无参的构造方法



public class Son extends Father{  
	private int age;  
	//子类构造方法——必须先显式调用父类构造方法  
	public Son(int i) {  
		super(i);//必须先调用父类的构造方法,然后才能写子类构造方法的其他逻辑    可以注释掉这句看运行结果
	    this.age = i - 20;  
		System.out.println("实例化子类 age = " + age);  
	}  
	public Son() {
		super();   //可以注释掉这句然后看运行结果
		System.out.println("这是子类的无参构造方法");
	}
	//main方法  
	public static void main (String [] args) {  
		//实例化子类Son  
		Son so = new Son(40);  
		Son so1 = new Son(50);
		Son so2 =new Son();
	}  
} 


实例化父类 ag = 40
实例化子类 age = 20
实例化父类 ag = 50
实例化子类 age = 30
这是父类的无参的构造方法
这是子类的无参构造方法

当子类想继承父类时,父类必须有无参的构造方法,如果不主动添加系统会默认添加一个无参的构造方法,此时子类可以顺利继承父类

但是当父类添加了一个带参的构造方法时,此时系统将不会再默认添加无参的构造方法,所以此时必须自己手动添加一个无参的构造方法,这样才能保证被子类顺利的继承

在实例化子类的时候会自动的实例化父类,如果此时的父类还继承了其他的类,那么便会逐级的向上查询,知道找到顶级的父类,然后开始逐个的实例化,在实例化的同时

便会自动调用无参的构造方法,但是如果想要调用父类的带参的构造方法,此时就必须通过super(i)进行调用


Java ,子类可以继承父类无参方法和有参构造方法。当子类继承父类时,子类会自动拥有父类所有的非私有方法和成员变量,包括无参方法和有参构造方法。可以通过子类对象来调用这些方法和构造方法。 下面是一个示例代码,其 `Person` 是父类,`Student` 是子类: ```java public class Person { private String name; public Person(String name) { this.name = name; } public void sayHello() { System.out.println("Hello, my name is " + name); } } public class Student extends Person { private int grade; public Student(String name, int grade) { super(name); // 调用父类的有参构造方法 this.grade = grade; } public void study() { System.out.println(name + " is studying in grade " + grade); } } public class Main { public static void main(String[] args) { Student student = new Student("Tom", 3); student.sayHello(); // 调用父类的无参方法 student.study(); // 调用子类自己的方法 } } ``` 在上面的代码,`Person` 类有一个有参构造方法和一个无参方法,`Student` 类继承了 `Person` 类,并且在自己的构造方法调用了父类的有参构造方法。在 `Main` 类,我们创建了一个 `Student` 对象,并且通过这个对象调用了父类的无参方法和子类自己的方法。 需要注意的是,如果父类只有有参构造方法,而没有无参构造方法,在子类必须显式地调用父类的有参构造方法,并且传入合适的参数。否则编译器会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值