Java学习笔记-面向对象

本文详细介绍了Java的面向对象编程,包括面向对象的三大特性——封装、继承和多态,以及类与对象的创建、构造器、抽象类和接口。通过实例解析了类的初始化、构造器的作用、封装的实现步骤、继承的格式与限制、重写的原则,以及多态的条件和使用。此外,还讨论了super关键字、instanceof的应用以及接口的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01-什么是面向对象


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

  • 名词解释

OOP:Object Oriented Programming:面向对象编程

OOD: Object Oriented Design:面向对象设计

OOA:Object Oriented Analysis:面向对象分析

  • 面向对象三大特性

1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

02-类与对象的创建


类与对象的关系

  • 类是一种抽象的数据类型,它是对某一类事物整体描述、定义,但是并不能代表某一个具体的事物,如动物、植物、电脑等
  • 对象是对抽象概念的具体实例,如张三、明朝那些事儿等等

创建与初始化对象

  • 创建对象三步走
    • 声明:声明一个对象,包括对象名称和对象类型。
    • 实例化:使用关键字new来创建一个对象。
    • 初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Student {
    public Student(String name) {
        System.out.println("你的名字是:"+name)
    }
    public static void main(String[] args){
        Student student = new Student("sanye");
    }
}
  • 创建对象时必须调用构造方法,构造方法和类名字相同,而且必须没有返回类型,也不能写void

03-构造器详解


  • 定义:构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。
  • 特点:
    • 方法名必须与类名相同
    • 可以有 0 个、1 个或多个参数
    • 没有任何返回值,包括 void
    • 默认返回类型就是对象类型本身
    • 使用new关键字,本质是在调用构造器
    • 一旦定义了有参构造,无参构造就必须显示定义
public class MyClass {
    private int m;    // 定义私有变量
    MyClass() {
        // 定义无参的构造方法
        m = 0;
    }
    MyClass(int m) {
        // 定义有参的构造方法
        this.m = m;
    }
}

04-封装


该露的露,该藏的藏

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

封装:数据的隐藏

  • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

封装:属性私有(private),通过get/set使用

实现Java封装的步骤

  1. 修改属性的可见性来限制对属性的访问(一般限制为private)
  2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问

优点:

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 增加系统可维护性
public class Person{
    private String name;
    private int age;
    public int getAge(){
      return age;
    }
    public String getName(){
      return name;
    }
    public void setAge(int age){
      this.age = age;
    }
    public void setName(String name){
      this.name = name;
    }
}

05-继承


定义:

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
  • extends的意思是扩展,子类是父类的扩展

格式

class 父类 {
}
class 子类 extends 父类 {
}

Java中类只有单继承没有多继承

img

super详解

super注意点:

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中!
  3. super和this不能同时调用构造方法!

super和this不同点:

  • 代表的对象不同:this本身调用这个对象,super代表父类对象的应用
  • 前提不同:this没有继承也可以使用,super只能在继承条件下才可以使用
  • 构造方法不同:this()调用本类的构造,super()调用父类的构造

重写

  • 需要有继承关系,子类重写父类的方法

  • 子类和父 类的方法必须要一致,方法体不同

  • 特点

    • 方法名必须相同
    • 参数列表必须相同,否则就变成重载了
    • 修饰符的范围可以扩大:private–>default–>protected–>public
    • 抛出的异常:范围可以被缩小,不能被扩大。ClassNotFoundException 不能变成 Exception()
  • 为什么需要重写

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

06-多态


定义格式

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

定义格式:父类类型 变量名=new 子类类型();

注意事项:

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型就不确定了*
  • 对象能执行哪些方法,取决于左边,与右边关系不大
  • 多态是方法的多态,属性没有多态
  • 父类可以指向子类但不能调用属于子类的方法
  • 在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
  • 父类和子类之间有联系,转换错误会报类型转换异常ClassCastException

存在条件:

  • 继承关系,没有继承关系就不存在多态了
  • 方法需要重写,带有static、final、private修饰的方法不能重写
  • 父类的引用指向子类对象

instanceof关键字

**作用:**用来判断某个对象是否属于某种数据类型

**注意:**返回值为Boolean类型

Object o = new Student();
System.out.println(o instanceof Object);	//true
System.out.println(o instanceof Person);	//true
System.out.println(o instanceof Student);	//true
System.out.println(o instanceof Teacher);	//false
System.out.println(o instanceof String);	//false

类型转换

  • 父类引用指向子类对象
  • 把子类转换为父类:向上转换 父类类型 变量名=new 子类类型();
  • 把父类转换为子类:向下转换,强制转换 父类类型 变量名=new 子类类型();
  • 方便方法的调用,减少重复的代码,提高利用率

抽象类


注意事项:

  1. 抽象类不能new,只能靠子类去实现它
  2. 抽象类中可以写普通的方法
  3. 抽象方法必须在抽象类中
  4. 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

07-接口


接口就是规范,定义的是一组规则,就像人间的法律,制定好后所有人都遵守

区分

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范,无法写方法

接口的声明

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

接口的特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的制定为public abstract(并且只能是public abstract,其它修饰符都会报错)
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 接口不能被实例化,因为接口中没有构造方法
  • implements 可以实现多个接口
  • 子类必须要重写接口中的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值