/*
- java面向对象
- 三条主线
- 1,java类以及类的成员
- 类的成员:属性,方法,构造器,代码块,内部类
- 2,面向对象的三大特征
- 封装性(Encapsulation),多态性(Polymorphism),继承性(Inheritance),(抽象性abstractness)
- 3,其他关键字的使用
- this,super,static,final,abstract,interface,package,import
- 等
*/
/*
- 面向对象(OOP Object Oriented Programming)与面向过程(POP Procedure Oriented Programming)比较
- 1,两者都是一种思想,面向对象是相对于面向过程而言,面向过程,强调功能行为,以函数为最小单位,考虑怎么做。
- 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑由谁来做。
- 2,面向对象更强调运用人类日常思维逻辑所采用思维方法与原则,例如抽象,分类,继承,聚合,多态
- 举例子:实现“人把水果装入冰箱”。
- 一,面向过程:
- 1,打开冰箱门
- 2,拿起水果,放入冰箱
- 3,关闭冰箱门
- 二,面向对象
- 1,对象:人—步骤1:打开(对象1:冰箱)门,:步骤2:拿起(对象2:水果),步骤3:关闭(对象1:冰箱)门
- 2,对象1:冰箱—功能1:可以打开,功能2:可以关闭
- 3,对象2:水果—功能1:可以被拿起
- 实例化对象后,对相关对象调用相应功能实现设计目的。
- 面向对象的设计思想
- 一.程序员由面向过程中的执行者转为面向对象的指挥者
- 二,面向对象分析问题的步骤:
- 1,根据问题需要,选择问题针对的现实世界的实体。
- 2,从实体寻找解决问题相关的属性和功能,这些属性和功能演变成概念世界中的类
- 3,将抽象的实体用计算机语言描述,形成计算机世界中类的定义,即借助某种程序语言,
- 把类构造成计算机可以识别和处理的数据结构
- 4,将类实例化成计算机世界中的对象,对象是计算机世界中解决问题的最终工具
- 例子
- 售票员统计车票的金额
- 售票员与车票可以是类
- 统计动作是售票员的方法,金额是车票里的一个数据
- 一般名词可以创建类,动词为类中的方法
*/
/*
- 面向对象的两个要素:
- 类(class)和对象(Object)是面向对象的核心概念,万事万物皆是对象
- 1类是对一类事物的描述,是抽象的概念上的定义
- 2对象是实际存在的该类事物的个体,因而也称为实例(Instance).
- 抽象的人=类,具体的某个人=对象
- 面向对象的程序设计重点是对类的设计
- 而类的设计就是类中成员的设计,对象具有的功能取决于类的设计
*/
/*
- java代码世界由各种功能不同的类组成
- 类中常见的成员:
- 1,属性Field(翻译为域或字段)=对应类中的成员变量
- 2,行为(功能)=对应类中成员的方法Method(函数)
- 创建类的对象 = 类的实例化 = 实例化类
- 对应现实世界人类有年龄身高等属性,有跑步说话等功能
- 类的语法格式
- 修饰符 class 类名{ //考虑修饰符(是否需要),类名(是否重名,是否关键字,是否清晰形象)
- 属性声明; //(修饰符,属性类型,属性名,初始化值)
- 方法声明; //(修饰符,返回值类型,方法名,形参等)
- }
- 说明:修饰符public表示可以被任意访问
- 修饰符private表示只能在类中被访问
- 类的主体需用{}包起来
- 例子
- public class Person1{
- private int age;//声明一个私有变量age
- public void showAge(int i){//声明方法showAge()
-
age = i;
- }
- }
*/
/*
- 类和对象的使用(面向对象的实现方式)
- 1,创建类,设计类的成员
- 2,创建类的对象
- 3,通过“对象.属性”或“对象.方法”调用对象的相关功能
- 注意:如果创建了一个类的多个对象,那么每一个对象都有独立的一套类的属性(非static情况下)
- 在内存中有独立的空间,属性的初始化值与一维数组的初始化值一样
- 如果修改一个对象的属性不影响另外一个对象的属性的值
*/
/*
- 对象的创建和使用:内存解析
- 1堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的的对象实例都在这里分配内存,
- 在java虚拟机中的描述是:所有的对象实例及数组都要在堆上分配
- 2,通常所说的栈(stack),是指虚拟机栈,虚拟机栈用于储存局部变量等,局部变量表存放
- 了编译器可知长度的各种基本数据类型(boolean,byte,char,short,long,float,double),
- 对象引用(reference类型,它不等同与对象本身,而是对象在堆内的首存地址)。方法执行完后,自动释放
- 3,方法区(Method Area),用于储存已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据
*/
package com.atguigu.contact;
public class Object1 {
public static void main(String[] args) {//测试类中创建main方法作为入口
Person people = new Person();//实例化Person类
//调用属性格式 :对象.属性
people.name = "john";
people.age = 18;
people.isMarried = false;
people.gender = '男';//调用属性赋值
//调用方法格式 :对象.方法
people.eat();
people.talk();
people.sleep();
people.work();
System.out.println(people.display(1));//调用方法输出
Person1 people1 = new Person1();
//调用构造器格式 :对象.构造器(参数)
people1.Person("Tom",30, false);//调用构造器赋值
System.out.println(people1.display(2));//赋值后调用方法输出
//新创建一个对象,看属性的初始化值
Person people2 = new Person();//方法内,局部变量
System.out.println(people2.name);//null
System.out.println(people2.age);//0
System.out.println(people2.gender);//空值
System.out.println(people2.isMarried);//false
//
Person people3 = new Person();
people3 = people;
people3.age = 10;
System.out.println(people3.name);//输出john
System.out.println(people.age);//输出10,与数组类似,直接赋值与复制不同
//相当于将people 的地址赋值给people3,指向的是同一个内存空间。
}
}
class Person{
String name;
int age;
char gender;
boolean isMarried;//属性声明部分,成员变量
public void eat() {//没有返回值需加 void
System.out.println(name + "吃了一顿饭");
}
public void talk() {
System.out.println(name + "唠了一会嗑");
}
public void sleep() {
System.out.println(name + "睡了一会觉");
}
public void work() {
System.out.println(name + "干了一会活");
}
public String display(int index) {//可以在括号里定义变量,在调用时赋值使用,形参,局部变量
return (index + "号人物名字是:" + name + " 年龄是:" + age + " 性别是:" + gender + " 是否已婚:" + isMarried);
}//方法声明部分
}
class Person1{
//属性
String name;
boolean isMarried;
int age;
//构造器
public void Person() {}
public void Person(String n,int num,boolean mark) {//形参,局部变量
name = n;
isMarried = mark;
age = num;//构造器内部变量,局部变量
}
//方法
public void walk () {
System.out.println(name + "向前走了一段路");
}
public String display(int index) {
return index + "号人物名字是:" + name + " 年龄是:" + age + " 是否结婚" + isMarried;
}
//代码块
{
name = "hank";
isMarried = true;
age = 20;//代码块内,局部变量
}
//内部类
class pet{
String name;
float weight;
}
}