Java面向对象1--类和对象

面向过程的程序设计:

面向过程,一种较早的编程思想,在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先干什么,后做什么。每一个功能都使用函数实现.

面向对象的程序设计(OOP):

面向对象程序设计,顾名思义,该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。
面向对象程序设计是当今主流的程序设计规范,更加适合使用于解决规模较大的问题,但是千万不要误解为面向对象一定就优于面向过程的设计.

面向对象三大特征:

  • 封装(Encapsulation):将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能

  • 继承(Inheritance):当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。

  • 多态(Polymorphism):可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。


抽象:

抽象是指从特定的角度出发,从已经存在的一些事物中抽取我们所关注的特性、行为,从而形成一个新的事物的思维过程,是一种从复杂到简洁的思维方式。

类(class):

类(Class)定义了一件事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。
具有相同特性(状态)和行为(功能)的对象的抽象就是类

举例来说,“人”这个类会包含人的一切基础特征,即所有“人”都共有的特征或行为,例如有眼睛,有鼻子,会吃饭。

/*
 定义类:
1:类名使用 名词  或者  名词短语,
类名首字母 大写,
如果有多个单词组成使用 驼峰表示法
2:如果类使用了public修饰,则当前类所在的文件名称也必须为该类名.
 */
 public class User {
    private String name;
    private int age;

    public void eat() {
        System.out.println("");
    }

    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
}

对象(Object):

对象(Object)是类的实例。

例如,“狗”这个类列举狗的特点,从而使这个类定义了世界上所有的狗。而莱丝这个对象则是一条具体的狗,它的属性也是具体的。狗有皮毛颜色,而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。一个具体对象属性的值被称作它的“状态”。(系统给对象分配内存空间,而不会给类分配内存空间。这很好理解,类是抽象的系统不可能给抽象的东西分配空间,而对象则是具体的。)

总结:对象是类的实例,类是对象的抽象。

对象的基本操作

  • 对象的创建和使用
//使用new关键字创建对象
User usr1 = new User("A",20);//new关键字的作用:1).在堆内存开辟空间,2).创建对象
  • 对象的比较
    每次new出来的对象,都表示独立使用一块堆内存空间.
    所以比较对象不能使用"=="号,因为等号比较的是内存的地址,即是不是同一块内存区域. 此时我们可以使用Object类中的equals方法(自定义类需要覆盖equals方法)来比较是否是同一个对象.

eclipse工具能自动生成自定义类的equals方法,鼠标右键(或者快捷键A/t+Shift+s)


eclipse工具自动生成equals方法.png
@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
//对象的比较
        System.out.println(user1 == user2);//false == :对于引用类型比较的是地址
        System.out.println(user1.equals(user2));//true:
  • 打印对象
    打印对象的时候,默认打印出的是对象的hashCode值
    但是,我们更关心的是对象中的状态,比如name是什么,age是什么.如果想在打印对象的时候,看到对象的状态信息,可以在当前类中覆盖Object类中的toString方法

eclipse工具自动生成toString方法,快捷键A/t+Shift+s,选择''toString"

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }
//对象的打印,未覆盖toString之前
System.out.println(user1);//User@66e
//覆盖toString之后
System.out.println(user1);//User [name=A, age=20]
        
  • 对象的生命周期
    从new开始到该对象不被任何么变量引用的时候结束,一旦一个对象不被任何变量所引用时,该对象就是垃圾,就等着Java的垃圾回收器(GC)来清理。
    注意:并不是垃圾一旦产生GC就会清理,这完全取决于JVM的调度,程序员无法控制。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,144评论 0 62
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,378评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 《故事思维》听书笔记: 本书作者认为 讲故事 是无论在工作中还是生活中,影响或说服别人的最佳方式,往往胜过讲道理,...
    千年白果树阅读 189评论 0 0