【100天自学JAVA从入门到进阶-第七天】谈谈对象

93 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情


  • 💂 个人网站: IT知识小屋
  • 🤟 版权: 本文由【IT学习日记】原创、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

一:什么是对象

  定义: 在系统中,对象是用于客观描述一个事物的一个实体,而类这是这类实体的抽象,它是构成系统的一个基本单位。 一个对象由一组描述对象的属性和一组描述对象的动作组成。

  类的实例化可以创建对象,每个对象都有它的生命周期,对象的生命周期可以简单的归为:生成、使用、销毁三个阶段。

  在JAVA语言中,一个类如果不存在引用时,那它就是一个无用的对象,JAVA的垃圾回收器会自动扫描JVM虚拟机,对这些没有被引用的垃圾对象进行回收,开发者也可以显示调用System.gc()方法告知垃圾回收器进行回收垃圾对象。

  但是并不意味着在调用完这个方法后垃圾回收器就会垃圾去回收,具体的回收时间是由垃圾收回器自己确定,调用这个方法只是给垃圾回收器发送一个“信号”,告诉它现在内存不够或者可以去存在垃圾对象需要它回收。

延伸问题一:面向对象有什么特征

  面向对象的三大特征:封装、继承、多态

  封装: 隐藏对象的属性和实现细节、只提供访问的公共方法,实现的方式是通过访问修饰符来限定。

  继承: 继承表示的是一个类拥有另一个类的相关信息,通过关键字extends实现,被继承的类叫父类(基类、超类),得到继承信息的类也叫子类或派生类,JAVA中类只能单继承,但是可以实现多个接口。

image-20210607200843724

  多态: 同一个行为可以有不同的表现形式的能力。具体来说就是一个类型可以有多种表现的形式,如:动物可以是狗、也可以是猫,具体如图所示:

image-20210607215654546

延伸问题二:多态有什么优点

  对类型解耦,可以使用父类或者接口接收子类对象

  可替换性,如实例一个猫对象,可以用动物接收:Animal cat = new Cat()

  可拓展性,多态是对象的多种表现形式的体现,很易于拓展,如动物除了猫狗外,还可以是鸡鸭鱼等

  更灵活,可以随意拓展新的表现形式而不影响其他的形式

延伸问题三:多态存在的必要条件

  1、继承父类或者实现接口

  2、重写

  3、使用父类/接口接收子类对象

image-20210607222417728

``

class Animal2 {
    void draw() {}
}
 
class Dog extends Animal2 {

    @Override
    void draw() {
        System.out.println("汪汪");
    }
}
 
class Cat2 extends Animal2 {
    @Override
    void draw() {
        System.out.println("喵喵");
    }
}
 
class Fish extends Animal2 {
    @Override
    void draw() {
        System.out.println("泡泡");
    }

延伸问题四:JAVA作为面向对象,它有什么特点或者好处

  1、易于理解,有更好的可读性

  2、平台无关性,一次编译,处处运行

  3、提供了许多类库,方便开发者的工作,减少开发时间

  4、提供了对web的支持

  5、具有较好的安全性和健壮性(如垃圾回收)

  6、去除了C++中难以理解,易于混淆的特性

二:多态的实现方式

  方式1、 继承父类重写父类方法,关键字extends

/**
 * 图形
 */
class Shape {
    void draw() {}
}
/**
 * 圆
 */
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Circle.draw()");
    }
}
/**
 * 正方形
 */
class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Square.draw()");
    }
}
/**
 * 三角形
 */
class Triangle extends Shape {
    @Override
    void draw() {
        System.out.println("Triangle.draw()");
    }
}

  方式2、 实现接口,重写接口方法,关键字implements

/**
 * 图形
 */
interface Shape {
     void draw();
}
/**
 * 圆
 */
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle.draw()");
    }
}
/**
 * 正方形
 */
class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square.draw()");
    }
}
/**
 * 三角形
 */
class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Triangle.draw()");
    }
}

  方式3、 同一个类中方法重载

class Animal3{
    /*
        重载实现多态
     */
    
    public void call(){
        System.out.println("无参数的叫声");
    }
    
    public void call(String mode){
        System.out.println("带参数的叫声");
    }
}

写在最后

  面向对象编程是JAVA语言的核心特点,能否正确理解对象含义对后续的JAVA学习有着至关重要的作用,本文通过通俗的例子介绍了对象的含义和一些特点,希望能够帮助到自学JAVA的小伙伴,下一篇文章再见啦。

  如果文章对您有帮助,希望能收到您的点赞、关注、收藏哦!,欢迎进入个人主页添加博主,进行技术交流哦!