一、面向对象
 
1.1、面向对象的概念
 
 很经典的一句话----------万物皆对象
定义:面向对象一相对面向过程而言的
       面向对象和面向过程都是一种思想
      面向过程------强调的是功能行为  语言:C语言
面向对象------将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
 
1.2、什么是类
 

我肯定说,不知道、不清楚。

简单讲类是java中的基本单元,类是具有相同特性和行为的对象集合

1.3、类的定义

class 类名{

数据类型  属性 ;
….                           
 
public 返回值的数据类型 方法名称(参数1,参数2…){
    程序语句 ;    
     [return 表达式;]
}

}

1.4、类包含

类中包含成员和行为(方法)


package com.pb.demo2;
/*
* 人类
*/
public class Person { //Persion为类名
/*
* 属性,name,sex,age
*/
public String name; //名字
public String sex ; //性别
public int age; //年龄 /*
*方法(行为)
*/
//吃饭
public void eat(){
System.out.println("吃饭");
}
//工作
public void work(){
System.out.println("工作");
}
}

1.5、三大特征

封装、继承、多态

二、类和对象关系

2.1、类和对象

类就是对现实生活中事物的描述。

对象就是这些事物,实实在在的个体

package com.day05;

/**
* 汽车类
*
* @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
* 属性和行为共同成为类中的成员变量(成员变量和方法)
*/
public class Car { // 颜色
String color = "红色";
// 轮胎
int num = 4; // 运行跑起来的行为
public void run() { //局部变量
//int num=10;
System.out.println(color + " " + num);
} public static void main(String[] args) { Car c = new Car();// 声明汽车对象c
c.color = "黄色"; // 更改属性值
c.num = 8;
c.run(); // 调用方法 Car c1=c;
c1.color="白色";
c1.num=6;
c.run();
}
}
结果:
黄色   8
白色   6
 
2.2、成员变量和局部变量
 作用范围
      成员变量作用于整个个类中
      局部变量作用于方法或者文句中
在内存中的位置
     成员变量在堆内存
     局部变量在栈内存
 
使用this.成员变量 调用成员变量
局部变量直接使用变量名
如果成员变量和局部变量同名,且没有使用this关键字调用,在同一个方法中默认使用局部变量
 
2.3、匿名对象
package com.day05;

/**
* 汽车类
*
* @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
* 属性和行为共同成为类中的成员变量(成员变量和方法)
* 作用范围
* 成员变量作用于整个个类中
* 局部变量作用于方法或者文句中
* 在内存中的位置
* 成员变量在堆内存
* 局部变量在栈内存
*/
public class Car { // 颜色
String color = "红色";
// 轮胎
int num = 4; // 运行跑起来的行为
public void run() { //局部变量
//int num=10;
System.out.println(color + " " + num);
} public static void main(String[] args) {
new Car().num=99;
new Car().color="blue";
new Car().run();
}
}

红色   4

匿名对象,对一个的方法调用一次时, 可以使用。
对一个对象进行多次调用时,要声明对象
第二种方式:
匿名对象可以做为参数传递
 
 
三、封装
 
 

3.1、隐藏对象的属性和实现细节,公对外提供公共的访问方式。

好处:
 将变化隔离
便于使用
提高重用性
提高安全性
封装原则:
将不需要对外提供的内容隐藏起来
把属性都隐藏,提供公共方法对其访问
package com.day05;

/**
* 人类
*
* @author Denny
*
*/
public class Person { private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setAge(-20);
p.setGender("人妖");
p.say();
} }

结果:

年龄不合法!
性别不合法只能是男或者女!
姓名:张三    年龄:0  性别:null

3.2、访问修饰符
 
四、构造函数
 
4.1、构造方法定义
构造方法的主要目的是为类中的属性初始化
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,…){
程序语句 ;
…    // 构造方法没有返回值
}
}

在构造方法的声明中读者一定要牢记以下几点:
· 构造方法的名称必须与类名称一致
· 构造方法的声明处不能有任何返回值类型的声明
· 不能在构造方法中使用return返回一个值
例:
每个类中肯定都会有一个构造方法
如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法
 
public class Person {

    private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 public Person() { //无参数构造方法 }
//实现构造方法重载
public Person(String name, int age, String gender) { //有参数构造方法 this.name = name;
this.age = age;
this.gender = gender;
} // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} } public static void main(String[] args) {
Person p = new Person("张三",13,"男");//调用有参数的构造方法
p.say();
}
}
4.2、构造代码块
package com.day05;

/**
* 人类
*
* @author Denny
*
*/
public class Person { private String name; // 姓名
private int age; // 年龄
private String gender; // 性别 /*
* 构造代码块:
* 作用:给对象进行初始化
* 对象 一建立就运行,而且优先于构造方法执行
* 构造代码块是给所有对象进行统一初始化
* 构造方法是给对应的对象初始化
*/
{ System.out.println("这是Person 的构造代码块");
} public Person() { } public Person(String name, int age, String gender) { this.name = name;
this.age = age;
this.gender = gender;
} // 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
} // getter、setter方法 提供的对外的访问
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
// 检查年龄是不是在0-150之间
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
} public String getGender() { return gender;
} public void setGender(String gender) {
// 检查条件
if (gender.equals("男") || gender.equals("女")) {
this.gender = gender;
} else {
System.out.println("性别不合法只能是男或者女!");
}
} public static void main(String[] args) {
Person p = new Person("张三",13,"男");
Person p1=new Person(); } }

结果:

这是Person 的构造代码块
这是Person 的构造代码块

 
 
五、this关键字
 
 
5.1、this关键字作用
 
调用成员变量
当成员变量和局部变量同名时,优先使用局部变量,如果要调用成员变量
当成员变量和局部变量同名时,要调用成员变量可以使用this.成员变量名 来调用成员变量
 
// 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age + " 性别:" + this.gender);
}

this:代表什么?

本类的对象,到底代表哪一个?
this代表它所在函数所属对象的引用。
哪个对象在调用的this所在的函数,this就代表哪个对象.
package com.day05;

/**
*
* @author Denny this 语句的调用
*/
public class Person1 {
private String name; // 姓名
private int age; // 年龄 public Person1() { } public Person1(String name) {
this.name = name; // 为本对象name赋值 } public Person1(String name, int age) {
// 在构造方法中调用另一个构造方法时this必须放在第一行
this(name); // 调用另一个构造方法
this.age = age; } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
// 自我介绍的方法
public void say() {
System.out.println("姓名:" + this.name + " 年龄:" + this.age);
}
public static void main(String[] args){
//声明一个参数的对象
Person1 p1=new Person1("张三");
p1.say();
Person1 p2=new Person1("张三",25);
p2.say(); } }

结果:

姓名:张三    年龄:0
姓名:张三    年龄:25

基础学习day05---面向对象一类,对象、封装的更多相关文章

  1. java基础学习总结——面向对象1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...

  2. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  3. python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)

    一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...

  4. python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  5. python基础学习 Day19 面向对象的三大特性之多态、封装

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  6. Java基础学习(三)—面向对象(上)

    一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...

  7. 零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  8. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  9. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  10. Java基础学习之面向对象(4)

    目录 1.面向对象概述 1.1.类与对象的关系 1.2.类的具体描述 2.面向对象的三大特性 2.1.继承 2.2.多态 2.3.封装 1.面向对象概述 1.1.类与对象的关系 有对象吗,没有的话我给 ...

随机推荐

  1. 跨域名 Cookie 传递测试

    问题 我打开了 www.aaa.com 里面的一个页面(www.aaa.com/hello.php),其中这个 hello.php 里面包含一个 <img> 标签,里面的 src 来自于 ...

  2. C10K问题渣翻译

    The C10K problem [Help save the best Linux news source on the web -- subscribe to Linux Weekly News! ...

  3. 在腾讯开发应用中心上架apk所遇到的问题

    这篇只是为了记录我走过的弯路,和判断错误的方法 首先当我用 keyStore打包apk的时候,程序没有报任何错误,当然也可以运行: 接下来就是上传该apk吧: 等上传完了,就报解析错误.如下.: aa ...

  4. Python 的字符串格式化和颜色控制

    (部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...

  5. 从IE6到IE11上运行WebGL 3D遇到的各种坑

    这篇<基于HTML5的电信网管3D机房监控应用>基于WebGL技术的应用让少同学对HTML5 3D的应用产生了兴趣和信心,但有不少网友私信询问WebGL如何运行在老的IE678910浏览器 ...

  6. 一些有用的UtilityExtend小方法

    public static bool StartBy(this string thisValue, params string[] startBy) { foreach (string item in ...

  7. “康园圈--互联网+校园平台“项目之sprint2

    一.sprint2任务列表 1.部署框架,并上传代码到github. 2.原型设计 * 设计首页界面原型(包括功能公告.快速通道等展示栏) * 设计店铺浏览页面原型 * 设计店内浏览页面原型 * 设计 ...

  8. AccessHelper

    代码: using System; using System.Data; using System.Configuration; using System.Data.OleDb; using ahwi ...

  9. 一个让echarts中国地图包含省市轮廓的技巧

    背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂 ...

  10. SVN 忽略文件但不删除文件

    SVN忽略一些不必要的文件但不删除 如果svn仓库中有一些不希望被别人提交的文件 该如何忽略掉对这个文件的更改但又不删除这个文件呢? 在找了一堆解决方案后得出了如下结论 去除要被忽略文件的版本控制 基 ...