构造方法、this、super关键字

构造方法

1.1、构造方法的定义格式:

public 类名(参数列表){

}

方法的名字必须和类的名字完全一致,并且不允许返回值类型,void也不行

普通方法定义格式:修饰符  返回值类型 方法名(参数列表){return}

构造方法在new的时候,自动执行 ,其他方法需要对象.方法,调用才能执行。而且构造方法只执行一次,new一次执行一次

new类,就是在调用类(class)的构造方法,每个class必须拥有构造方法,构造方法不写也有,,编译的时候,javac,会自动检查类中是否有构造方法,如果没有,编译器就会自动添加一个空参数的构造方法。

如果手写了构造方法,在编译的时候,就不会自动添加构造方法

当调用构造器的时候new person()是可以调用类的构造器,但是这个构造器里根本没有参数

new person("张三",20)实在调用有参数的构造器,当然参数必须存在

构造方法可以重载,也就是一个类可以共同有多个构造器

下面两个构造器属于重载关系

 

输出为:旺财   18、小强  17.

构造方法内存图


this关键字

this.用于区分局部变量和成员变量的同名情况:

                                                                  1   成员变量:作为类的成员而存在,直接存在于类中。所有类的成员变 量可以通过this来引用。

                                                                  2    局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。

                                                                  3    全局变量:定义在类上面,全部可以进行this调用

this另一种用法:this()可以再构造方法之间进行调用

 this()在空参构造器里调用了有参构造方法,将参数传递给有参构造器,但是在传递的时候this()必须在构造器第一行

调用哪一个构造方法完全地看this()括号里面的参数与哪呢个构造器相匹配重载形式的构造方法,无论new哪一个构造器都会进行赋值运算。

 

 


super关键字、父子类

  • 1、Super的应用
  1. super.,可以调用父类成员变量
  2. super.调用父类成员方法()
  3. 在构造方法当中可以调用父类构造方法super()
  • 2、在子类中使用super()的方式,调用父类的构造方法
  1.  super()调用的是分类中空参的构造器
  2.   super(有参)调用的是父类中有参数的构造器
  3. 但是在父类中调不到子类构造器
  • 3、子类构造方法
  1. 子类构造方法的第一行,有一个隐式代码super()
  2. public Student(){

               super()

        }

  • 在new子类构造器的时候要首先new父类构造器
  • 子类中所有的构造方法无论重载多少个,第一行必须是super()
  •   父类中有多个构造方法,子类中调用几个都可以,
  • 构造方法不能继承,当然也没有重写的概念

构造方法的第一行到底是写this还是super

不能同时存在,然选其一,但是保证子类的所有构造方法都能调用到父类中的构造方法即可

  • 无论如何,子类的所有构造方法,直接或者间接,必须调用到父类构造方法
  • 子类构造方法,什么都不写,默认的第一行也是super()
  • super表示的是父类的内存位置,标记出所继承的父类的内存区域,
  • 而this是本类的对象引用

子父类内存关系:

子类调用父类实例

/*
 *把共性抽取出来,做成父类
 *子类继承共性,继承person
 *创建的同时==new Student、new Worker
 */
public class Person {
	private String name;
	private int age;
	public static void main(String[] args) {
		Worker w = new Worker("光头强", 30);
		System.out.println(w.getAge());
		System.out.println(w.getName());

		Student s = new Student("熊二", 10);
		System.out.println(s.getAge());
		System.out.println(s.getName());

	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

class Student extends Person {
	public Student(String name, int age) {
		super(name, age);
	}
}

class Worker extends Person {
	public Worker(String name, int age) {
		super(name, age);

	}

	
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值