Java面向对象_构造方法,重载,访问权限


  • 整理了一些Java面向对象的笔记,记录在这里 @Zeii

构造方法

构造方法是创建对象时,自动调用的方法

语法:

public 类名(){

}

  • 构造方法没有返回类型,名字与类名相同
  • 使用new创建对象时,会自动调用
public class Car {
	// 成员变量
	String color;
	int speed;
	int seats = 5;
	// 构造方法,创建对象时自动调用
	// 系统默认给一个无参的构造方法
	// 当你创建了自己的构造方法时,会将系统的构造方法覆盖掉
	public Car(String color, int speed) {
		this.color = color;
		this.speed = speed;
	}
	// 成员方法
	public void run() {
		System.out.println("跑起来了");
		System.out.println(this.color);
		System.out.println(this.speed);
		System.out.println(this.seats);
	}
	public static void main(String[] args) {
		Car c = new Car("红色", 180);
//		c.color = "红色";
//		c.speed = 120;
//		c.seats = 5;
		c.run();
	}
}

构造方法的作用:在创建对象时,对对象成员变量进行初始化


构造方法的重载

重载:类的方法名相同,参数不同,称为重载

构造方法也可以重载,即写多个参数不同的构造方法,很实用,用于创建不同的对象

public Car(String color, int speed){
    this.color = color;
    this.speed = speed;
}
// 构造方法重载
public Car(String color, String name, int speed){
    this.color = color;
    this.name = name;
    this.speed = speed;
}
注意

两个构造方法中,都有color和speed属性,代码有重复。这种情况可以在第二个构造方法中使用this,调用第一个构造函数对相同的成员变量进行赋值。

 public Car(String color, int speed){
    this.color = color;
    this.speed = speed;
}
// 构造方法重载
public Car(String color, String name, int speed){
    this(color, speed); // 调用被重载的构造方法
    this.name = name;
}

这时的this不再是调用对象的成员变量,而是调用构造方法

注意this的用法是this(); 而不是this.color


访问权限

  1. public, 公共的,所有人都可以访问
  2. private, 私有的,只有在类内部可以访问
  3. default, 又叫friendly, 在同一个包内可以访问
  4. protected, 在同一包内或子类可以访问
  • 注意

    (1) 一个java文件里,只能有一个public类,这个类的类名必须与文件名相同,其他的类不能加public

    (2)private变量或方法只能在类内部访问,一旦实例化对象后,对象无法访问或调用

成员变量初始值

Java中的变量必须先声明,赋值,才能使用。
对于类的成员变量,在创建对象时,所有成员变量首先会进行初始化,如果类中没有给出赋值,则系统默认:

  • 基本数据类型初始为0。(boolean --> false)
  • 引用数据类型(类)初始为null

小练习-对象之间的交互:模拟植物大战僵尸

Unit类

用来创建plant和zombie对象

成员变量成员方法
nameinjure
hp
damage
Client类

用于plant和zombie的交互

成员变量成员方法
fight

把plant和zombie的战斗动作放在fight里完成,不要在plant或zombie的内部做,尽量减少类之间的耦合

  • Unit
public class Unit {
	// plant和zombie的成员变量和方法都是一样的,所以一个Unit类就够了
	// 如果有不同,也可以从Unit类中分别继承
	// 成员变量
	String name;
	int hp;
	int damage;
	
	//构造方法
	public Unit(String name, int hp, int damage) {
		this.name = name;
		this.hp = hp;
		this.damage = damage;
	}
	// 成员方法,只需要受伤就够了
	public void injure(int damage) {
		this.hp -= damage;
	}

}
  • Client
public class Client {
	// 让fight的动作在Client中进行,而不是直接写在plant或zombie中
	// 这样可以降低plant和zombie的耦合度,即数据与表现分离
	// Unit单元只需要做出受到伤害后的动作即可,即减血
	public static void fight(Unit plant, Unit zombie) {
		zombie.injure(plant.damage);
		System.out.println(plant.name+"揍了"+zombie.name+"一下");
		System.out.println(zombie.name+"还有"+zombie.hp+"点血");
	}
	
	public static void main(String[] args) {
		Unit plant = new Unit("豌豆", 100, 5);
		Unit zombie = new Unit("梯子僵尸", 200, 10);
		
		fight(plant, zombie);
		fight(zombie, plant);
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值