JAVA面向对象的学习笔记

本文详细介绍了面向对象编程的核心概念,包括类与对象的关系、对象的创建与初始化、构造器的使用。通过实例展示了如何进行对象的封装,强调了封装在代码组织中的重要性。此外,还探讨了继承的概念,指出Java中单继承的特性以及super和this的用法,并解释了方法重写的原则和目的。最后,提到了多态这一面向对象的重要特性,为后续的抽象类、接口和内部类的学习奠定了基础。
摘要由CSDN通过智能技术生成

面向对象(OOP)

1、什么是面向对象?

  • 面向对象编程(Object-Oriented Programming)

  • 本质:以类的方式组织代码,以对象的组织(封装)数据

  • 三大特征:封装、继承、多态

  • 从认知的角度,先有对象后有类(把一堆老师抽象成教师类)

  • 从代码的角度,先有类后有对象(在教师类中new出来老师)

2、创建与初始化对象

public class Application {

    public static void main(String[] args) {

        //类是抽象的,需要实例化
        Student student1 = new Student();
        Student student2 = new Student();

        student1.name = "小明";
        student2.name = "小红";
        student1.age = 3;
        student2.age = 3;

        System.out.println(student1.name);
        System.out.println(student2.name);
        System.out.println(student1.age);
        System.out.println(student2.age);        
        student1.study();
        student2.study();
    }
}
public class Student {

    //属性
    String name;
    int age;

    //方法
    public void study(){
        System.out.println(this.name + "在学习");
    }

}

3、构造器详解

一个类即使什么都不写,他也会存在一个方法

类中的构造器也称为构造方法,实在进行创建对象的时候必须要调用的。并且有以下两个特点

  • 必须和类的名字相同
  • 必须没有返回类型,也不能写void

注:1、一旦定义了有参构造,无参就必须显示定义

生成构造方法的快捷键为 ALT + INS

public class Application {

    public static void main(String[] args) {

        //Person类中即使什么都不写,也能new出来一个对象,这是因为类中存在编译器送的无参构造
        Person person = new Person();  // 调用无参构造
        System.out.println(person.name);

        Person person1 = new Person("小红");  // 调用有参构造
        System.out.println(person1.name);
    }
}
public class Person {

    String name;

    //无参构造
    //作用:1、使用new关键字,本质是在调用构造器(必须要有构造器)
    //     2、实例化初始值
    public Person(){
        this.name = "小明";
    }

    //有参构造 :一旦定义了有参构造,无参就必须显示定义
    public Person(String name){
        this.name = name;
    }

    //ALT + INS (快捷键构造)
    //都选中为有参构造,什么都不选为无参构造

}

4、创建对象的内存分析

1)代码:

public class Application {

    public static void main(String[] args) {

        Student student1 = new Student();
        student1.name = "小明";
        student1.age = 3;
        student1.study();
        System.out.println(student1.name);
        System.out.println(student1.age);
        
        Student student2 = new Student();
    }
}
public class Student {

    String name;
    int age;

    public void study(){
        System.out.println(this.name + "在学习");
    }
}

2)内存图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdauyJN8-1626619829348)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210717130004161.png)]

3)分析:

public class Application {
    public static void main(String[] args) {

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHsKX6RL-1626619829350)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210717131137740.png)]

Student student1 = new Student();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jm5ISSUa-1626619829352)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210717132331557.png)]

student1.name = "小明";
student1.age = 3;
student1.study();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYWO7q4w-1626619829354)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210717132529995.png)]

Student student2 = new Student();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eEGRE8f-1626619829355)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210717132956049.png)]

5、封装

  • 我们的程序追求 “高内聚,低耦合”; 高内聚:类内部数据的操作细节由自己完成,不允许外部干涉; 低耦合:尽量暴露少量的方法给外部使用

  • 封装就是数据的隐藏

  • 关于封装只需要记住:私有属性,getter/ setter

  • ALT + INS 快捷键可以快速生产 getter/setter 方法

6、继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

  • JAVA中类只有单继承,没有多继承(一个son只能有一个father)

  • JAVA中所有的类都直接或间接继承 Object 类

  • CTRL + H 快捷键可以打开继承关系树,查看所有的继承关系

  • super / this

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZT8kNEW-1626619829356)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210718221202921.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M2AM0q2U-1626619829357)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210718220812593.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sj4fYne0-1626619829357)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210718220937562.png)]

  • 注:1、父类中私有的属性或方法无法在子类中用super继承 . 2、父类中没有无参构造,则子类中也无法存在无参构造 . 3、super 和 this 不能同时调用构造方法,因为两者都必须在第一行

  • 方法的重写

    • 重写都是方法的重写,和属性无关

    • ALT + INS 快捷键可以快速重写方法

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FY5zavd2-1626619829358)(C:\Users\宸\AppData\Roaming\Typora\typora-user-images\image-20210718223150474.png)]

    • 总结:1. 重写需要有继承关系,子类重写父类的方法!子类的方法必须和父类的一致!!方法体不同!!!

      ​ 2.参数列表必须相同

      ​ 3.修饰符的范围可以扩大,但不能缩小 e.g. 父类是public,子类不能是private (public->protected->default->private)

      ​ 4.抛出的异常的范围,可以被缩小,不能被扩大

    • 为什么要重写:

      • 父类的功能,子类不一定需要,或者不一定满足

7、多态

8、抽象类

9、接口

10、内部类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SELGITUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值