JAVA学习第七天;构造函数 ;构造/局部代码块 this;继承

本文详细介绍了Java中的构造方法,包括其特点、执行时机和重载。同时讲解了构造代码块和局部代码块的区别及作用。通过实例展示了构造方法在继承中的应用,强调了构造方法与父类构造方法的调用关系,并解释了Java的单继承特性及其对私有资源的继承限制。此外,还探讨了对象创建的过程和继承的概念,以及在继承中如何使用this关键字。
摘要由CSDN通过智能技术生成

构造方法

1是一个与类同名的方法,并且他没有返回值
2作用是完成对象创建或者初始化
3当类创建对象时,就会自动调用构造方法
4构造方法与普通方法一样可以重载;

形式

与类同名,且没有返回值,可以含参,也可以不含参

修饰符 构造方法名(与类名相同)[参数列表 ] { 代码 -------- }

构造方法如何记忆
1特点 方法名与类名相同 ,且没有返回值类型
2执行时机;创建对象时会立即执行
3默认会创建无参构造,但是如果创建了含参构造时,会自动覆盖默认的无参构造,需要手动添加

/*构造方法的练习/
public class exercis {
public static void main(String[] args) {
//用new为gods 创建对象时 每一次定义都会执行构造方法
gods g=new gods();
gods g1=new gods(“火神”);
gods g2=new gods();
}
}
//将"神王"抽象化定义为类
class gods{
//定义属性 也就是成员变量,不是局部变量
String firecgod;
String watergod;
String segod;

  public  gods(){
      System.out.println("我是一个无参函数");
  }
  public  gods(String s){
      System.out.println("我是一个有参函数");
  }
  public gods(String firecgod, String watergod, String segod) {
      this.firecgod = firecgod;
      this.watergod = watergod;
      this.segod = segod;
      System.out.println("我是一个全参函数");
  }

}
在这里插入图片描述
如图可见 ,对照有参和全参,调用有参时,()内输入类型.和参数, 输出结果才会时有参,不然括号没有内容,会象全参一样默认为无参

构造代码块与局部代码块

格式 : { }
构造代码块的特点
1 位置在类里,方法外
2,作用:用于抽取构造方法中的共性代码
3执行时机:每次调用构造方法时都会提前调用构造代码块
4注意事项:构造代码块优先于构造方法加载

局部代码块
位置: 在方法里面的代码块
作用:通常用于控制变量的作用范围,除了括号会失效
注意事项:变量的作用范围越小越好,成员变量会存在线程安全的问题

在这里插入图片描述

在这里插入图片描述
如图可见,创建对象时,会触发构造函数,而每次出发构造函数,一定会触发构造代码块,并且构造代码块要优先于构造函数.

局部代码块
在这里插入图片描述
在这里插入图片描述

this

代表本类对象的一个引用对象
this.name=name 形式 //当方法内的局部变量和成员变量同名时,可以使用this 来指定成员变量

在这里插入图片描述
在这里插入图片描述

,

this练习之构造方法间的调用

在有参中 this(); 可以调用无参
在无参中 this(类型;参数)可以调用无参
不要形成循环

创建对象的流程

person p =new person ()
1把person.class 加载进内存
2在栈内存中开辟空间 用来存放变量p
3在堆内存开辟空间,用来存放 new person 所生成的对象
4对象生成后,会生成一个唯一的地址值
5将地址值交给变量p
6以后可以用变量p来调用 new person的属性值和方法

继承

是面向对象最显著的一个特征
是从已有的类中派生出新的类,新的类会继承以有类的属性和行为,并扩展新的能力
新类可以自定义增加新的数据和行为,且可以使用父类的功能,但不能选择性的继承父类(超类,基类)
这种继承方式可以节省开发效率,降低开发费用

继承的特点

1,使用extends 关键字来表示继承关系
2相当于把子类把父类的功能复制了一份
3java 只支持单继承
4继承可以传递 (爷爷-爸爸-儿子)
5父类的私有资源(private)修饰过的,不能被子类继承
6多用于功能的修改,子类可以在拥有父亲属性和行为的同时,在进行扩展

/*构造方法的练习/
public class exercis {
public static void main(String[] args) {
Elephant e=new Elephant();
Tiger t =new Tiger();
Dog d =new Dog();
e.Power(“大象”);
t.Power(“老虎”);
d.Power(“修勾”);
t.god(“啸天虎”);
d.gods(10000,“啸天神虎”);
}
}
//定义爷爷类
class Elephant{
String weight;
public void Power(String b){
System.out.println(b+“说他的力量是最强的”);
}

}
//定义儿子类
class Tiger extends Elephant {
private String b = “其实我是虎王”;//私有属性 子类 "dog"用不了,访问不到

  public void god(String a) {
    System.out.println("我是" + a + "大象跟我装什么呢.");
  }

}
//定义孙子类
class Dog extends Tiger {
public void gods(int c,String a) {
//可以使用父类的所有的非私有资源,而且私有资源不能被限制访问到
System.out.println(“我差不多是”+c+“个”+a+“的加起来在呈1000的总成吧”);
}
}
//定义父亲类
class tight{
int sum=1
}

//定义孙子类
class Dog extends Tiger {
//定义子类的成员变量
int sum=10;
public void gods( ) {
int sum=100;
System.out.println(sum);//结果为100
System.out.println(this.sum);//结果为10
System.out.println(super.sum);//结果为1

super之继承中构造方法的使用

本类用于测试继承中构造方法的使用

  • 1.子类在创建对象时,默认会先调用父类的构造方法
  • 2.原因是子类构造函数中的第一行默认存在super();–表示调用父类的无参构造
  • 3.当父类没有无参构造时,可以通过super(参数)调用父类的其他含参构造
  • 子类必须调用一个父类的构造函数,不管是无参还是含参,选一个即可
  • 4.构造方法不可以被继承!因为语法的原因:要求构造方法的名字必须是本类类名
  • 不能在子类中出现一个父类名字的构造方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值