Day_07面向对象与类

一.面向对象
1.定义:面向对象(Object Oriented Programming)是一种编程的思想,通过这种思想可以把生活中的复杂事情简化,从原来的执行者变成了指挥者。面向对象是基于面向过程而言的。

2.例子对比
面向过程:打开冰箱,把大象放进去,关上冰箱。
面向对象:饿了,打开美团外卖。

3.三大特征
<1>封装性:把相关的数据封装成一个类组件。
<2>继承性:子类自动共享父类的属性和方法。
<3>多态:增强软件的灵活性和重用性。

二.类和对象
1.类:Java语言最基本的单位,是一类事物的抽象。

2.对象:每个对象具有三个特点,分别是<对象的状态>,用于描述对象的基本特征。<对象的行为>,用于描述对象的功能,以及<对象的标识>,指对象在内存中都有一个唯一的地址来区分其他对象。

3.类和对象的关系:用Java语言描述,通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。

4.分析案例:分析手机。
<1>属性(成员变量):颜色,尺寸,品牌,价格。
<2>行为(成员方法):打电话,发短信,听音乐。
<3>类:手机类,抽取相同的属性和行为。
<4>对象:按照模板生产很多手机,比如1号手机,2号手机以及n号手机,各自包含他有的成员变量和成员方法。

三.类的创建使用

public class Class_Create {

	public static void main(String[] args) {
		
		Person p = new Person();//p是引用对象,持有了对Person对象的地址值的引用。
		
		 = "Yan Dexuan";//设置属性值。
		p.age = 24;
		
		p.eat();//调用成员方法。
		p.sleep();
		
	    }

	}
	
	class Person{//Person类
		
		String name;//成员变量。
		int age;
		
		public void eat() {//成员方法。
			System.out.println("吃饭");
		}
		
		public void sleep() {
			System.out.println("睡觉");
		}
		
	}

四.创建多个类

public class Class_Create2 {

	public static void main(String[] args) {
		
		Person1 p1 = new Person1();
		
		 = "Yan Dexuan";
		p1.age = 24;
		
		Person1 p2 = new Person1();
		
		 = "bad";
		p2.age = 23;

	}

}

class Person1{
	
	String name;
	int age;
	
	public void eat() {
		System.out.println("吃");
	}
	
	public void sleep() {
		System.out.println("睡");
	}
	
}

五.对象在内存中的存储
1.一般来讲,局部变量存在于栈中,方法执行完毕之后内存就被释放。
2.对象存在于堆中,当对象不再被使用时,内存就会被释放。
3.每个堆内存的元素都有地址值。
4.对象中的属性都是有默认值的。

六.封装
1.定义:封装是指隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式。
2.优点:提高安全性和重用性。
3.private关键字:是权限修饰符,用于修饰成员变量和成员函数,被私有化的额成员只能在本类中访问,要修改只能提供对外提供的公共的get和set方法。

七.简单封装案例

public class Class_Package {

	public static void main(String[] args) {
		
		Student s = new Student();
		
		/* = "Yan Dexuan";
		System.out.println();*/
		
		s.setName("Yan Dexuan");//利用set给属性赋值。
		System.out.println(s.getName());//利用get给属性取值。
		
	}

}

class Student{
	
	private String name;//隐藏成员变量。右键source后设置get和set方法。

	public String getName() {//设置公共的取值方法。
		return name;
	}

	public void setName(String name) {//设置公共的赋值方法。
		thi = name;
	}
	
}

八.创建Teacher类和对象

public class Class_Teacher {

	public static void main(String[] args) {
		
		Teacher t = new Teacher();
		
		 = "Yan Dexuan";
		t.age = 24;
		t.address = "China";
		
		System.out.println();
		System.out.println(t.age);
		System.out.println(t.address);
		
		t.teach();
		

	}

}

class Teacher{
	
	String name;
	int age;
	String address;
	
	public void teach() {
		System.out.println("讲课");
	}
	
}

九.创建Plane类和对象

public class Class_Airplane {

	public static void main(String[] args) {
		
		Plane p = new Plane();
		
		p.Fly();
		p.Takeoff();
		
		p.color = "Red";
		p.number = 1;
		p.band = "Nike";
		p.price = 1000.0;
		
		System.out.println(p.color);
		System.out.println(p.number);
		System.out.println(p.band);
		System.out.println(p.price);

	}

}

class Plane{
	
	String color;
	int number;
	String band;
	double price;
	
	public void Fly() {
		System.out.println("飞行");
	}
	
	public void Takeoff() {
		System.out.println("降落");
	}
	
}

十.创建对象的流程
Person p = new Person();这行代码的过程如下:
1.把Person.class文件加载进内存。
2.在栈内存中,开辟空间,存放变量p。
3.在堆内存中,开辟空间,存放Person对象。
4.对成员变量进行默认的初始化。
5.对成员变量进行显示的初始化。
6.执行构造方法(如果有构造代码块,就先执行它)。
7.堆内存完成。
8.把堆内存的地址赋值给变量p,p就是一个引用变量,引用了Person对象的地址值。