Java基础 - 面向对象

本文深入探讨面向对象编程的核心概念,包括封装、继承、多态等特性,解析类与对象的关系,成员变量与局部变量的区别,以及抽象类、接口、多态的应用场景,帮助读者掌握面向对象编程的精髓。

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

  1. 面向对象思想
    世界万物皆对象。
    我们都知道编程思想有「面向过程」和「面向对象」。面向过程注重的是实现过程。比如说把大象装进冰箱里这个例子。
    第一步:打开冰箱;
    第二步:把大象塞进冰箱;
    第三步:关闭冰箱;
    以上三个步骤就是面向过程的思维,那面向对象呢?就是把这三步封装进冰箱这个对象里,只要有这个冰箱对象,大象就能塞进去冰箱,而不用去思考如何把大象塞进冰箱。

  2. 类和对象的关系
    「对象」的集合就是「类」。
    张三是一个具体的对象,李四是一个具体的对象。他们都属于 People 这个类。

  3. 成员变量和局部变量的区别
    分四点来说
    第一点:定义的位置不同。成员变量定义在class里,局部变量定义在方法体里或者语句里;
    第二点:作用域不同。成员变量的作用域是整个class中,局部变量的作用域就相对小了;
    第三点:内存中位置不同。成员变量在堆内存空间,局部变量在栈空间里;
    第四点:生命周期不同。局部变量随方法运行完就结束了,成员变量还会存在与堆内存中等待回收;

  4. 封装
    类成员变量私有化就是封装的一种,提供get set 方法。
    目的:
    ①提高代码复用性;
    ②隐藏实现细节,对外提供访问方式,便于调用;
    ③提高安全性;

  5. 继承
    代码复用性高,可以提升开发效率
    注意事项:
    ①一个子类只支持单继承
    ②一个父类可以有多个子类
    ③支持多层继承 b extends a;c extends b

  6. 抽象类
    ①不能实例化
    ②没有方法体
    ③抽象方法必存在于抽象类中
    ④强制子类必须实现抽象类的所有抽象方法
    ⑤抽象类中可以存在非抽象方法

  7. 接口
    特殊的抽象类
    ①接口中全是抽象方法,无法定义普通的成员变量,只能是常量
    ②将功能的定义和实现分离,优化了程序设计
    ③权限锁死为public
    ④接口的好处:扩展功能,降低耦合性
    ⑤接口中可以多继承

  8. 抽象类和接口的区别
    相同点:
    ①都位于继承的顶端,用于被其它类继承或实现
    ②不能直接实例化
    ③都包含抽象方法,子类必须重写
    不同点:
    ①抽象类为部分方法提供实现,避免子类重复实现,提高代码重用性;接口中只有抽象方法
    ②一个类只能继承一个直接父类,却可以实现多个接口(接口弥补了 java 的单继承)
    ③抽象类是某个事物中应该具备的内容,继承体系是一种 is…a 的关系
    ④接口类是某个事物中额外的内容,继承体系是一种 like…a 的关系

  9. 多态
    一种事物有多种形态,体现在父类引用变量可以指向子类对象。不过前提是有继承父类或者有实现接口。

    多态有三种调用形式,普通类,抽象类,接口;举个例子
    People p1 = new Student();
    People p2 = new Teacher(); 父类引用变量指向子类对象。
    使用多态后的父类引用变量在调用时,会调用子类重写后的方法。

    成员变量有什么特征?
    编译时,参考父类是否有这个成员变量,有则成功
    运行时,运行的是父类的变量值

    成员方法有什么特征?
    编译时,参考父类是否有这个成员方法,有则成功
    运行时,运行的是子类重写的方法
    ④向上转型,自动转换
    好处:可以调用共有的成员
    弊端:不能调用子类特有的方法
    ⑤向下转型,强制转换
    可以调用子类特有的方法

  10. 构造方法
    ①new 对象的时候就在调用对象的构造方法
    ②子类构造方法的第一行有一个隐式代码 super()
    ③子类中所有的构造方法,无论重载多少个,第一行必须是super()

  11. final
    修饰类,不可被继承;
    修饰方法,不能被重写;
    修饰变量,就成为常量,只能赋值一次;
    修饰引用变量,内存地址终身不变

  12. static
    意义所在:共享数据的存在;
    被修饰的成员,可以被 new 出来的对象调用,也可以直接类名调用;
    类进入到方法区后,先加载自己的静态成员;
    内存中,静态优先于非静态存在的;
    静态中不能访问非静态;
    生命周期跟着类消失而消失;
    接口中的变量都是常量;
    定义成员变量的时候,多个事物之间是否有共性的数据;
    定义成员方法的时候,根据变量走,如果方法没有调用过非静态成员,将方法定义为静态;

  13. 匿名对象
    new Person().eat();
    没有引用变量,只能使用一次,如果确定只调用一次,那就可以用匿名对象;

  14. 内部类
    将类写在其它类的内部,可以写在其他类的成员位置和局部位置(方法体里);
    在描述事物时,若一个事物内部包含其他的事物,比如描述汽车,汽车内部还包含发动机,这时发动机就可以用内部类来描述;

  15. 匿名内部类
    定义实现类,重写方法,创建实现类对象,一步搞定;
    前提 有继承或有实现;
    new 接口或父类(){重写抽象方法};
    只能写在方法中;

  16. 代码块
    构造代码块,new 一次,执行一次,优先于构造方法‘
    静态代码块,无论 new 几次,只执行一次,优先于构造代码块;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值