Java学习笔记 Day7 面向对象(二)

类与对象的关系

类是一种抽象的数据类型,他是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。例如:

  • 动物、植物、手机、电脑……
  • Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为

对象是抽象概念的具体实例

  • 张三就是人的一个具体实例,张三家里的狗旺财就是狗的一个具体实例
  • 能够体现出特点,展现出功能的是具体实例,,而不是一个抽象的概念
package com.oop.demo2;

//学生类
public class Student {

	//属性:字段
	String name; // null
	int age; //0

	//方法
	public void study(){
		System.out.println(this.name+"在学习");
	}

}
/*
public static void main(String[] args) {
		//类是抽象的,需要实例化
		//类实例化后会返回一个自己的对象
		//student对象就是一个Student类的具体实例
		Student student = new Student();
		Student xiaoming = new Student();
		Student xiaohong = new Student();

		xiaoming.name = "小明";
		xiaoming.age = 13;

		System.out.println(xiaoming.name);
		System.out.println(xiaoming.age);
		System.out.println(xiaohong.name); // null
		System.out.println(xiaohong.age); // 0
	}

 */

创建与初始化对象

使用new关键字创建对象

使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的使用。

类中的构造器也称为构造方法,实在进行创建对象的时候必须要调用的。构造器有以下俩个特点:

  • 必须和类的名字相同
  • 必须没有返回类型,也不能写void
package com.oop.demo2;

//Java--->class
public class Person {

	//一个类即使什么都不写,它也会存在一个方法即构造器
	String name;
	//显示定义构造器
	//1.使用new关键字,本质调用构造器
	//2.用来初始化值
	public Person(){

	}
	//有参构造:一旦定义了有参构造,无参就必须显示定义
	public Person(String name){
		this.name = name;
	}
	//alt+insert 生成构造器快捷键
}

/*
public static void main(String[] args) {

		//new 实例化了一个对象
		Person person = new Person();
		System.out.println(person.name); // null

	}

	构造器:
		1.和类名相同
		2.没有返回值
	作用:
		1.new本质在调用构造器
		2.初始化对象的值
	注意点:
		1.定义了有参构造后,如果想使用无参构造,需显示定义一个无参构造
 */

总结

public class Application {
	public static void main(String[] args) {
		/*
		1.类与对象
			类是一个模板:抽象。对象是一个具体的实例
		2.方法
			定义、调用
		3.对应的引用
			引用类型: 基本类型(8)
			对象是通过引用来操作的:栈-->堆(地址)
		4.属性:字段 Field 成员变量
			默认初始化:
				数字: 0  0.0
				char: u0000
				boolean:false
				引用:null

			修饰符 属性类型 属性名 = 属性值!
		5.对象的创建和使用
			必须使用new关键字创造对象,构造器 Person cehncehn = new Person();
			对象的属性 cehncehn.name
			对象的方法 cehncehn.sleep()
		6.类
			静态的属性: 属性
			动态的行为: 方法

		 */

	}
}

封装

程序设计要追求高内聚,低耦合。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

总结下来:属性私有,get/set

//类 private: 私有
public class Student {

	//属性私有

	private String name;//名字
	private int id;//学号
	private char gender;//性别
	private int age;


	//提供一些可以操作这个属性的方法
	//提供一些public的get、set方法

	//get 获得这个数据
	public String getName(){
		return this.name;
	}
	//set 给这个数据设置值
	public void setName(String name){
		this.name = name;
	}

	//alt+insert 


	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age > 120 || age < 0) {
			this.age = 3;
		} else {
			this.age = age;
		}
	}
}
/*
	1.提高程序的安全性,保护数据
	2.隐藏代码的实现细节
	3.统一接口
	4.增加系统的可维护性
 */

public class Application {
	public static void main(String[] args) {
		Student s1 = new Student();

		s1.setName("cehncehn");

		System.out.println(s1.getName());

		s1.setAge(-1); // 不合法
		System.out.println(s1.getAge());

	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值