Java继承中构造器的定义(this,super的问题)

继承是对已有的类的扩展,它继承了父类所有的属性和方法(私有属性和方法同样继承了,但是不能使用)。

在类的定义中,需要通过构造器初始化,在创建对象时,new的其实就是构造器,而构造器分为有参构造器和无参构造器。

this用法:

1、在程序中产生二义性时,应该使用this来区分。比如区分全局变量和局部变量。普通方法中,this总是指向调用该方法的对象;构造器中,this指向正要初始化的对象。

2、可以使用this调用重载构造器,避免相同的初始化代码。但是只能在构造器中使用,并且位于构造器第一行。

3、this不能用于static方法中。

super()关键字:

super是直接父类对象的引用,即通过super来访问父类中的方法或属性。也可以根据super选择调用父类的构造器。

以下为总结出的构造器创建的几个应该注意的问题

a、一般情况下,若无手动添加任何构造器,则编译器会默认创建一个无参构造器

b、若一个类中只有有参构造器,而没有无参构造器,编译器不会提供默认的无参构造器。

c、在父类中若存在有参构造器,没有定义无参构造器,编译器不会提供默认的无参构造器,则子类无法正常继承父类。编译无法通过。

d、在类中定义了一个无参构造器,在其子类中不需要通过super()调用父类无参构造器,编译器会默认调用。

e、this引用该类的其他构造器或super调用父类相关属性或方法或构造器,必须在构造器第一行,且两则不可同时出现。

public class Test{
	public static void main(String[] args) {
		
		Man m = new Man("LEE","男",22);
		m.wake();
		m.work();
		System.out.println("------------------------------------");
		Women w = new Women("CHEN","女",22);
		w.wake();
		w.shopping();
		System.out.println("------------------------------------");
		Women w2 = new Women("chen","女",22,true);
		w2.wake();
		w2.shopping();
	}
}
class Person{
	String name;
	int age;
	public Person() {                       //父类无参构造器
		System.out.println("无参构造器");
	}
	public Person(String name) {            //父类有参构造器
		System.out.println("有参构造器");
	}
	public void wake() {
		System.out.println(name+"起床啦!");
	}
	
}
class Man extends Person{
	String gender;
	public Man(String name,String gender,int age) {
		//super();可有可无
		super(name);   //选择调用父类有参构造器
		//super.wake()  调用父类方法
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
	public void work() {
		System.out.println("工作赚钱!");
	}
}
class Women extends Person{
	String gender;
	public Women(String name,String gender,int age) {
		this("chen","女",22,false);  //调用其他构造器时,必须在第一行
		this.name = name;
		this.gender = gender;
		this.age = age;
		//this.keep()调用本类中的方法,则在对象创建过后自动执行该方法
		
	}
	public Women(String name,String gender,int age,boolean right) {
		this.name = name;
		this.gender = gender;
		this.age = age;
		if(right){
			System.out.println("成功!");
		}
		else {
			System.out.println("加油!");
		}
		
	}
	public void keep() {
		System.out.println("做家务啦!");
	}
	public void shopping() {
		System.out.println("逛街啦!");
	}
}

输出结果:

有参构造器
LEE起床啦!
工作赚钱!
------------------------------------
无参构造器
加油!
CHEN起床啦!
逛街啦!
------------------------------------
无参构造器
成功!
chen起床啦!
逛街啦!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值