zoukankan      html  css  js  c++  java
  • 《java入门第一季》之面向对象

    之前的代码描述都是基于面向过程的,今天开始正式进入面向对象的世界。什么是对象?首先要区分类和对象的概念——

    现实世界中是如何描述一个事物的?

    举例:学生
    姓名,年龄,性别...
    学习,吃饭,睡觉

    属性:该事物的描述信息
    行为:该事物能够做什么

    学习编程语言,是为了模拟现实世界的事物的。
    而学习的编程语言Java中最基本的单位是:类。
    所以,我们就应该把事物通过类来体现出来:
    由此,我们就得到了现实世界事物和类的对应关系:


    事物: 类:
    属性 成员变量
    行为 成员方法


    类:是一组相关的属性和行为的集合。是一个抽象的概念。
    对象:是该类事物的具体表现形式。具体存在的个体。


    举例:
    学生:类

    班长:对象

    1:面向对象思想
    面向对象是基于面向过程的编程思想。

    面向过程:强调的是每一个功能的步骤
    面向对象:强调的是对象,然后由对象去调用功能

    2:面向对象的思想特点
    A:是一种更符合我们思想习惯的思想
    B:可以将复杂的事情简单化
    C:将我们从执行者变成了指挥者

    举例:
    买电脑:
    面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑
    面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了
    洗衣服:
    面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来
    面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来
    吃饭:
    面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃
    面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃


    3:把大象装进冰箱
    面向过程:
    动作有哪些呢?
    A:打开冰箱门
    B:装进大象
    C:关闭冰箱门

    代码体现;
    class Demo {
    public static void main(String[] args) {

    //写了方法以后,调用就改变了
    open();
    in();
    close();
    }

    public static void open() {
    System.out.println("打开冰箱门");
    }

    public static void in() {
    System.out.println("装进大象");
    }

    public static void close() {
    System.out.println("关闭冰箱门");
    }
    }

    面向对象:
    我们怎么才能更符合面向对象思想呢?****重点中的重点!!!
    A:有哪些类呢?
    B:每个类有哪些东西呢?
    C:类与类直接的关系是什么呢?

    把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)
    A:有哪些类呢?
    大象
    冰箱
    Demo
    B:每个类有哪些东西呢?
    大象:
    进去
    冰箱:
    开门
    关门
    Demo:
    main方法
    C:类与类直接的关系是什么呢?
    Demo中使用大象和冰箱类的功能。

    代码体现:
    class 大象 {
    public static void in() {
    System.out.println("装进大象");
    }
    }

    class 冰箱 {
    public static void open() {
    System.out.println("打开冰箱门");
    }

    public static void close() {
    System.out.println("关闭冰箱门");
    }
    }

    class Demo {
    public static void main(String[] args) {
    冰箱调用开门
    大象调用进去
    冰箱调用关门
    }
    }

    4:开发,设计,特征
    面向对象开发
    就是不断的创建对象,使用对象,指挥对象做事情。

    面向对象设计
    其实就是在管理和维护对象之间的关系。


    面向对象特征
    封装(encapsulation)
    继承(inheritance)
    多态(polymorphism)


    /*
    	事物:
    		属性	事物的信息描述
    		行为	事物的功能
    	
    	类:
    		成员变量	事物的属性
    		成员方法	事物的行为
    		
    	定义一个类,其实就是定义该类的成员变量和成员方法。
    	
    	案例:来完成一个学生类的定义。
    	
    	学生事物:
    		属性:姓名,年龄,地址...
    		行为:学习,吃饭,睡觉...
    		
    	把事物要转换为对应的类:
    	
    	学生类:
    		成员变量:姓名,年龄,地址...
    		成员方法:学习,吃饭,睡觉...
    		
    	成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外。
    	成员方法:和以前的方法定义是一样的格式,但是把static先去掉。
    	
    	首先应该定义一个类,然后完成类的成员。
    */
    //这是学生类
    class Student {
    	//定义成员变量
    	//姓名
    	String name;
    	//年龄
    	int age;
    	//地址
    	String address;
    	
    	//定义成员方法
    	//学习的方法
    	public void study() {
    		System.out.println("学生爱学习");
    	}
    	
    	//吃饭的方法
    	public void eat() {
    		System.out.println("学习饿了,要吃饭");
    	}
    	
    	//睡觉的方法
    	public void sleep() {
    		System.out.println("学习累了,要睡觉");
    	}
    }
    
    <pre name="code" class="java">/*
    	在一个java文件中写两个类:一个基本的类,一个测试类。
    	注意:文件名称和测试类名称一致。
    	
    	如何使用呢?
    		创建对象使用。
    		
    	如何创建对象呢?
    		格式:类名 对象名 = new 类名();
    		
    	如何使用成员变量呢?
    		对象名.变量名
    	如何使用成员方法呢?
    		对象名.方法名(...)
    */
    //这是学生类
    class Student {
    	//定义成员变量
    	//姓名
    	String name; //null
    	//年龄
    	int age; //0
    	//地址
    	String address; //null
    	
    	//定义成员方法
    	//学习
    	public void study() {
    		System.out.println("学生爱学习");
    	}
    	
    	//吃饭
    	public void eat() {
    		System.out.println("学习饿了,要吃饭");
    	}
    	
    	//睡觉
    	public void sleep() {
    		System.out.println("学习累了,要睡觉");
    	}
    }
    
    //这是学生测试类
    class StudentDemo {
    	public static void main(String[] args) {
    		//类名 对象名 = new 类名();创建对象
    		Student s = new Student();
    		
    		//输出成员变量值  (对象名.变量名)
    		//System.out.println(s.name);
    		//System.out.println(s.age);
    		//System.out.println(s.address);
    		//改进写法
    		System.out.println(s.name+"---"+s.age+"---"+s.address);
    		
    		
    		//给成员变量赋值
    		s.name = "林青霞";
    		s.age = 27;
    		s.address = "北京";
    		//赋值后的输出
    		System.out.println(s.name+"---"+s.age+"---"+s.address);
    		
    		//调用方法,使用成员方法(对象名.方法名(....);)
    		s.study();
    		s.eat();
    		s.sleep();
    	}
    }
    <pre name="code" class="java">/*
    	手机类的测试
    */
    class Phone {
    	//创建成员变量
    	//品牌
    	String brand;
    	//价格
    	int price;
    	//颜色
    	String color;
    	
    	//创建成员方法
    	//打电话的方法
    	public void call(String name) {
    		System.out.println("给"+name+"打电话");
    	}
    	
    	//发短信的方法
    	public void sendMessage() {
    		System.out.println("群发短信");
    	}
    	
    	//玩游戏的方法
    	public void playGame() {
    		System.out.println("玩游戏");
    	}
    }
    
    class PhoneDemo {
    	public static void main(String[] args) {
    		//创建手机对象
    		//类名 对象名 = new 类名();
    		Phone p = new Phone();
    		
    		//直接输出成员变量值;(对象名.变量名)
    		System.out.println(p.brand+"---"+p.price+"---"+p.color);
    		
    		//给成员变量赋值
    		p.brand = "诺基亚";
    		p.price = 100;
    		p.color = "灰色";
    		//再次输出
    		System.out.println(p.brand+"---"+p.price+"---"+p.color);
    		
    		//调用方法;(对象名.成员方法名称(.....);)
    		p.call("林青霞");
    		p.sendMessage();
    		p.playGame();
    	}
    }

    创建多个对象内存图如下所示:

    
    
    <img src="http://img.blog.csdn.net/20160503225405927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
    
    两个对象内存图
    
    
    三个对象内存图:
    <img src="http://img.blog.csdn.net/20160503225525417?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
    
    


  • 相关阅读:
    以太网的寻址
    IP地址简介
    服务器控件与Html控件属性值的解释差异
    The Live Hacking CD
    德国SNS交友/视频网站Poppen.de的技术架构分享
    Forensic Log Parsing with Microsoft's LogParser
    The Flame: Questions and Answers
    hping
    WIN7与XP网络共享与访问
    Win7无法访问NAS或Samba解决之道
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299887.html
Copyright © 2011-2022 走看看