【狂神说java笔记】面向对象编程

面向过程与面向对象

  1. 面向过程
    考虑步骤,第一步做什么,第二步做什么
  2. 面向对象(Object-Oriented Programming,OOP)
    属性+方法=类
  • 分类的思维模式,首先思考解决问题需要哪些分类,然后对这些分类进行单独的思考,最后,才对某个分类下的细节进行面向过程的思索
  • 适合处理需要多人协作的问题
    以类的方式组织代码,以对象的组织(封装数据)
  • 三大特性:封装,继承(子类得到父类的东西),多态(同一个事物的形态不一样)
  • 对象:具体的事物;类:对对象的抽象
  • 代码的角度:先有类,后有对象;类是对象的模板

方法的调用

  1. 静态方法:在另一个类中引用时,使用“类名.方法名”即可
  2. 非静态方法:在另一个类中调用时,使用new操作符将要调用方法所在的类实例化:
  • new Student().sayHello();
  • Student student = new Student();
    student.sayHell0();
  1. 同一个类中,两个方法都是静态或非静态则可以互相调用,如果是一个静态一个非静态则无法互相调用,只能是非静态的调用静态的。
    原因:静态方法和类一起加载,非静态方法要等类实例化后才存在。
  2. 形参和实参
  • 值传递:实际参数和形式参数类型要对应
    值传递
    此时a仍为1
  • 引用传递:传递对象
    引用传递
    此时person是一个对象,指向的是Person类
    第一个打印的是”null“,第二个打印的是更改的值

类与对象的关系

  1. 类是一种抽象的数据类型,对某一类事物整体描述/定义,但是并不能代表某一具体的事物。一个类中只能存在属性和方法两种。
  2. 对象:抽象概念的具体实例
  3. 使用new关键字创建的对象,会分配内存空间并进行默认初始化以及对类中构造器的调用。
  4. 类是抽象的,必须实例化后才能使用。类实例化后会返回一个自己的对象。
    类 对象 = new 类();
  5. 类种的构造器也成为构造方法,有以下两个特点:
  • 必须和类名字相同
  • 必须没有返回值类型
    一个类即使什么都不写,也会存在一个方法
    构造方法
    Alt+insert+construct可自动生成一个构造方法

创建对象内存分析

  1. main()方法一开始在栈的最底下
  2. 然后再是对象
    对象内存草图

对象的引用

引用类型:除了八大基本类型以外的所有类型;对象是通过引用来操作的:栈—>堆
默认初始化

封装

  1. “高内聚,低耦合”:
  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
  • 低耦合:仅暴露少量的方法给外部使用
  1. 封装(数据的隐藏):禁止直接访问一个对象中数据的实际表现,通过操作接口来访问
  2. 属性私有,get/set
  • 通过private私有类中的变量(属性),此时另外的类无法直接调用该类中的变量(属性)。
  • 提供一些可以操作这个属性的方法,提供一些public的get、set方法,例:
    public String getName(){
    return this.name;
    }
    public void setName(String name){
    this.name = name;
    }
    Alt+insert可以自动生成get,set方法
    可以在get,set方法中做一些安全性的检查,规避掉不合法的数据设置
  1. 意义:
  • 提供程序的安全性,保护数据
  • 隐藏代码的实现细节
  • 统一接口,调用接口都是get,set
  • 增加了系统的可维护性

继承

定义

本质是对某一批类的抽象
public class Student extends Person{}
子类是父类的扩展,JAVA中类只有单继承,没有多继承,即一个子类只能直接继承一个类
注意父类中的方法是public时,子类才可以调用
ctrl+h可以展现继承结构,JAVA中所有类都默认继承Object类,故所有类都可调用Object类中的方法

super & this

super注意点:

  1. super是调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或构造方法中
  3. super和this不能同时调用构造方法
    VS this:
  4. 代表的对象不同,this代表调用的对象本身;super代表父类对象的应用
  5. this没有继承也能用,super只能在继承条件下使用
    当父类有无参构造时,可以不用super(),子类的无参构造会默认调用父类的无参构造。当父类只有有参构造时,子类无法进行无参构造,因为他无法调用父类的无参构造了。

方法的重写

与属性无关,不等于重载。
方法重写

  1. 如果用静态方法,则不会出现方法重写。
  2. 故前提是非静态且public的方法,父类和子类中方法(方法名和参数列表)一模一样,方法体不同,则称为方法的重写。
  3. 修饰符子类对于父类的范围可以扩大,但是不能缩小。(例:父为private,子可以扩大为public)。public>Protected>Default>private
  4. 抛出的异常:范围可以被缩小,不能被扩大。
    重写存在的意义:
    父类的功能,子类不一定需要或满足。
    快捷键: Alt+insert+override

多态

同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但是他可以指向的引用类型不确定。例:

Person s = new Student();//父类的引用指向子类

对象能执行哪些方法看对象左边的类型。两个类型都有的话则执行子类的方法。

  1. 多态是方法的多态
  2. 父类和子类,有联系才能转换,否则类型转换异常:ClassCastException!
  3. 存在条件:继承关系;方法重写;
  4. 有些方法不能被重写:静态方法(属于类,不属于任何实例);final(常量);private(私有方法)

instanceof和类型转换

instanceof(类型转换)引用类型,只能转换有关系的类型
父 instanceof 子 或 子 instanceof 父(子与父要与属性实际类型有关)
其中,子 instanceof 父没必要,因为可以在实例化中直接转换类型,例:

Person s = new Student();//父类的引用指向子类

也可以在s前加子类类型,例:

(Student) s

子类转换为父类,可能会丢失自己本来的一些方法。

static关键字详解

  1. 变量:静态变量可以直接使用类名访问,可以被类中所有方法共享;非静态变量只能通过对象调用。
  2. 方法:非静态方法可以调用静态方法和非静态方法;静态方法只能调用静态方法。
  3. 代码块:
    代码块描述
    匿名代码块:创建对象时创建,在构造方法之前;
    静态代码块:类一加载就直接执行,永久只执行一次。
    实行顺序:静态代码块->匿名代码块->构造方法
  4. 静态导入包:导入后可以不在方法前加类名,直接调用方法即可
import static java.lang.Math.random;

抽象

  1. 抽象类:通过abstract修饰的类即抽象类,其中可以写普通方法。
  2. 抽象方法:只有名字,没有方法体;一定要在抽象类中。
  3. 抽象类的所有方法,继承了它的子类,都必须实现它的方法。
  4. 不能new这个抽象类,只能靠子类实现,是一个约束。
  5. 存在构造器,可以用来提高开发效率

接口

普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范,实现约束和实现分离
接口声明的关键字是interface
接口中的所有定义都是抽象且public的,都需要有实现类。定义的属性都是常量,public static final,即一定是一个静态的常量,一般不在接口中定义属性。
实现接口的类,必须重写接口中的所有方法。该实现类可以实现多个接口。例:

package com.oop.demo03;

/**
 * @author soso
 * @PackageName:com.oop.demo03
 * @ClassName:UserServiceImpl
 * @Description:
 * @date 2024/8/2517:59
 */
public class UserServiceImpl implements UserService,TimeService{
    @Override
    public void add(String name) {
        
    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }
}

接口的作用:约束;定义一些方法让不同的人实现;接口不能被实例化,因为接口中没有构造方法;implements可以实现多个接口;实现类必须重写接口中的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值