JAVA学习笔记第五部分——Java面向对象编程

本文详细介绍了Java中的面向对象编程思想,包括面向过程与面向对象的区别,类和对象的概念,对象的创建过程,以及面向对象的三大特性——封装、继承和多态。同时,讲解了抽象类和接口在Java中的作用,强调了它们在代码组织和设计中的重要性。
摘要由CSDN通过智能技术生成

Java面向对象编程

Java的核心思想就是OOP(Object Oriented Pragramming)

目录:

一.解析面向对象的思想

  • 在了解面向对象的思想之前,让我们先了解一下面向过程的思想

面向过程的思想

  • 步骤清晰简单,即第一步做什么,第二步做什么…
  • 面向过程适合处理一些较为简单的问题
  • 属于线性思维

面向对象的思想

  • 物以类聚,分类的思维模式,思考问题前首先会考虑解决问题需要那些分类,然后对这些分类进行单独思考。最后进行面向过程的思索。
  • 适合处理复杂的问题,适合处理需要多人协作的问题

总结:对于描述复杂的问题,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。最后,才对某个分类下的细节问题进行面向过程的思索

二.认识对象和类

  • 从认识论角度考虑“对象”和“类”,是先有“对象”后有“类”。“对象”是具体的事物,“类”是抽象的事物,“类”是对“对象”的抽象。
  • 从代码运行角度考虑“对象”和“类”,是先有“类”后有“对象”。“类”是“对象”的模板。

类和对象的关系

  • 类是一种抽象的数据类型,它是对某一类事物的整体描述/定义,但是并不能代表某一具体的事物,动物、植物、手机、电脑、微生物…这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
  • 对象是抽象概念的具体事例张三家里面的旺财就是狗的一个具体的实例,它能够体现出特点,展现出实例的功能,而不是一个抽象的概念

三.对象的创建过程

使用new关键字创建对象

  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

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

  • 1.必须和类的名字相同
  • 2.必须没有返回类型,也不能写void
public class demo_02 {
    public static void main(String[] args) {
        //实例化这个类  new
        //对象类型 对象名 = 对象值。对象值变成了一个实例化对象
        Student student = new Student();
        student.say();
    }
}
//学生类
public class Student {
    public Student() {

    };//构造器

    //非静态方法
    public void say(){
        System.out.println("学生说话了");
    }
}

详细请看:

版权声明:本文为CSDN博主「书呆子Rico」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/justloveyou_/article/details/72466416

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

封装

简单来说封装就是该漏的漏,该藏的藏,我们程序设计要追求“高内聚、低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:尽量暴露少量的方法给外部使用

  • 封装是数据的隐藏,通常,应该禁止直接访问一个对象中数据的实际表示,而是通过操作接口来访问,这称为信息隐藏。
  • 记住一句话:属性私有,get/set
package JAVASE.object_oriented.demo_04;

public class Application {
    public static void main(String[] args) {
        Student s1=new Student();

        s1.setName("古天乐");

        String name=s1.getName();
        System.out.println(name);

        s1.setAge(20);//不合法
        System.out.println(s1.getAge());
    }
}

package JAVASE.object_oriented.demo_04;

//类
public class Student {
    //属性私有,但会提供一些平public的get、set
    private String name;
    private int age;
    private int id;
    private char sex;

    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getAge(){
        return this.age;
    }
    public void setAge(int age){
        if(age>0 && age<150){
            this.age=age;
        }
        else {
            this.age=3;
        }
    }
}
/*
封装的好处:
    (1)提高程序的安全性
    (2)隐藏代码的细节
    (3)统一接口
    (4)增强了系统的可维护性

方法的重载
    两个方法完全相同的条件:方法名称相同,参数列表相同
 */

继承

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

  • extends的意思是“扩展”,子类是父类的扩展
  • Java中只有单继承,没有多继承。就像一个儿子只有一个爸爸,一个爸爸能有多个儿子
  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等
  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示。
  • 子类和父类之间,从意义上讲应该具有“is a”的关系

多态

同一方法可以根据发送对象的不同而采用不同的行为方式

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

多态存在的条件

  • ①有继承关系
  • ②子类重写父类
  • ③父类引用指向子类对象

注意:多态是方法的多态,属性没有多态

拓展:instanceof(引用类型转换)

  • 父类引用指向子类对象
  • 把子类转换为父类,向上转型
  • 把父类转化为子类,向下转型,需要强制转换

代码解释如下:

package JAVASE.object_oriented.demo_07;

public class Application {
    public static void main(String[] args) {
        //类型之间的转换:基本类型转换  父子
        //高转低  强制转换;低转高   自然转换


        //高转低(向下转型)
        Person chinese=new Student();//Student将这个对象转换为Student类型,我们就可以使用Student类型的方法了
        ((Student)chinese).go();

        //低转高(向上转型)    子类转父类可能丢失自己本来的一些方法
        Person person=new Student();
        person.run();


//Object > String
        //Object > Person > Teacher
        //Object > Person > Student
        Object object=new Student();

//        System.out.println(x instanceof y);//能否编译通过取决于x与y是否有关系


        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false,关系未创建
        System.out.println(object instanceof String);//false,关系未创建
        System.out.println("=======================");


        Person person_=new Person();
        System.out.println(person_ instanceof Student);//false
        System.out.println(person_ instanceof Person);//true
        System.out.println(person_ instanceof Object);//true
        System.out.println(person_ instanceof Teacher);//false
//        System.out.println(person instanceof String);//编译报错
        System.out.println("=======================");


        Student student =new Student();
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
//        System.out.println(student instanceof Teacher);//编译报错
//        System.out.println(student instanceof String);//编译报错

    }
}

package JAVASE.object_oriented.demo_07;

public class Person {
    public void run(){
        System.out.println("run");
    }
}

package JAVASE.object_oriented.demo_07;

public class Student extends Person{
    public void go(){
        System.out.println("go");
    }

}

package JAVASE.object_oriented.demo_07;

public class Teacher extends Person{

}

go
run
true
true
true
false
false
=======================
false
true
true
false
=======================
true
true
true

五.抽象类和接口

抽象类

abstract修饰符可以用来 修饰方法,也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。

  • 抽象类可以没有抽象方法,但是抽象方法的类一定要声明为抽象类
  • 抽象类,不能使用new关键字来创建对象,它是用来记录子类继承的
  • 抽象方法,只有方法的声明,没有方法的实现,它是它是用来记录子类实现的
  • 子类继承抽象类,那么就必须实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

接口

普通类抽象类接口
只有具体实现只有具体实现和规范(抽象方法)只有规范
  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是… 则必须能…”的思想。例如:如果你是天使,则必须能飞;如果你是好人,则必须做好事…
  • 接口的本质是契约,就像人间的法律一样,制定好后大家遵守
  • 面向对象的精髓是对“对象”的抽象,最能体现这一点的就是接口

声明类的关键字是class,声明接口的关键字是interface

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java面向对象程序设计笔记: 目录----非原创,上课的时候老师给的资料哦 第一章 Java 前凑 3 1. Java前凑 3 Java产生的目的 3 Java的诞生的历史 3 2.Java语言的特点 3 简单性 3 面向对象 3 网络技能 3 3.Java语言与其他语言的区别 4 第二章 Java面向对象程序设计初步 4 1. 程序语言的分类 4 解释型语言Java是编译解释型语言Java编译器、解释器、JVM以及OS之间的关系 4 JVM的结构与作用 4 2. 程序设计的发展过程 4 程序设计的发展过程 4 O-O发展过程 5 O-O的体系 5 O-O程序设计与结构化程序设计的区别 5 3. Java应用程序 5 搭建开发环境 5 4. 类的设计与对象的构造 6 类的两个要素 6 构造函数 7 Java对内存的管理 7 Java源文件的结构 7 第三章 Java语法 8 1. Java注释 8 2. 标识符 9 3. 数据类型 9 基本数据类型 9 引用数据类型 9 5. 变量 9 6. 运算符 9 7. 数据的传输 9 8. 程序的逻辑控制语句 9 9. 数组 9 第四章 JavaOO程序设计 9 1.Java面向对象编程的特点 9 2.继承 10 2.1继承 10 2.2.Super关键字: 10 2.3.this关键字: 10 2.4.子类对象的构造和初始化: 11 2.5.方法的覆盖: 11 2.6.各种数据类型之间的相互转换: 12 3.静态成员 13 4. Final关键字: 13 5. 抽象类: 13 6. 接口 14 7. 接口与抽象类的区别: 15 8. 设计模式 15 单一设计模式: 15 策略模式: 16 模板模式: 16 组合设计模式: 16 9. 多态 16 10. 内部类 17 第五Java集合对象 18 1.List 18 2.Set 18 3.Map 19 第六章 常用的API类 21 1.对文件进行操作的类 21 2.对String对象操作的类 24 3. 对时间处理的类 25 4. 对系统处理的类: 26 5. 数据运算的类 27 6. 正则表达式 27 第七章 异常处理 32 第八章Oracle数据库基础 32 第九章JDBC编 32 第十章GUI编程 32
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

细谈人生一载

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

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

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

打赏作者

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

抵扣说明:

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

余额充值