Java面向对象

面向过程 & 面向对象

思想

面向过程:将一件事情步骤化(只适合处理较为简单的问题)
面向对象:思考问题会将问题进行分类,再对分类进行单独思考。最后才会对某个分类下的细节进行面向过程的思索(更适合处理大型复杂问题,适合处理多人协作的问题)

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

三大特性

封装

高内聚/低耦合:类的内部数据操作细节自己完成,不允许外部干涉/仅暴露少量的方法给外部使用
封装:应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
属性私有:get/set

private 访问关键字来实现封装
在这里插入图片描述

继承

派生:在继承了一些东西基础上增添新的东西

Java类只有单继承,没有多继承(只有接口有多继承)
子类继承父类,关键字extands来表示
子类和父类之间,从意义上讲具有“is a”的关系
Object 是所有类的基类

super
super注意点

  • super调用父类的构造方法,必须在构造方法的第一个
  • super必须只能出现在子类的方法或者构造方法中
  • super和this不能同时调用构造方法
    vs this
  • this:指本身调用者这个对象
  • super:父类的引用
  • this没有继承也可以使用
  • super有继承才可使用

构造方法

  • this 本类的构造
  • super 父类的构造
    在这里插入图片描述

方法的重写

重写只能public 父类与子类

重写:需要继承的关系 子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符,范围可以扩大不能缩小 public>protected>Default>private
4.抛出的异常,范围,可以被缩小,但不能扩大 classNotFundException -> Exception
重写:子类和父类的方法必须一直,方法体不同
1.父类的功能子类不一定需要 或者不一定满足

多态

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

Person p =  new Student(); //向上提型
Student p1 = new Student();

多态存在的条件

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象

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

static方法:属于类,不属于实例
final 常量 没有继承
private 方法 私有 不能继承

instanceof (类型转换-引用类型)

//(子类)父类 
Person p1 = new Student();
Student p2 = (Student)Person;
  • 将 子类转换为父类 向上转型(会丢失子类特有属性和方法)
  • 把父类转换为子类 向上转型 强制转换
  • 方便方法的调用,减少重复的代码

抽象类

abstract修饰符来修饰类/方法
只有约束没有实现
抽象出来,提高开发效率

  1. 不能new这个抽象类 只能靠子类去实现它:约束
  2. 抽象类中可以写普通方法
  3. 抽象的方法必须在抽象类中
public abstract class Action {
    public abstract void do();
}

创建与初始化对象

public class Studen {
     //属性
     String name; //null 抽象的类属性 最好不要赋值
     int age; //0
     final String name2; //
     //方法
     public static void main(String[] args){
         //**创建一个实例对象**
         Student stu = new  Sudent();
     }
}

构造器

  1. 每个类都有一个隐式构造器
  2. 必须没有返回类型,也不能也void
    3.作用:1.用于初始化属性 2.new 本质在调用构造方法
    4.注意:定义有参构造器之后 如果还想用无参构造,显示定义一个无参的构造
**无参构造**
public class Student {
    String name;
   public Student(){
       //初始化属性
       this.name = "张三";
   }
}
**有参构造**
 public class Student {
    String name;
   public Student(type var){
       //初始化属性
       this.name = "张三";
   }
}

访问关键字

访问关键字

修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其它包
publicYYYYY
protectedYYYY/N(说明)N
defaultYYYNN
privateYNNNN

接口的默认访问权限为public

对象的内存

在这里插入图片描述

接口

作用

1.定义约束,方法让不同人实现
2.方法 public abstract
3.属性 public static final 常量
4.接口不能被实例化 接口没有构造方法
5.implements可以实现多个接口继承(伪继承)
6.实现接口的类必须重写接口的方法

请添加图片描述

在这里插入图片描述
请添加图片描述

N中内部类

成员内部类

可以获取外部类的私有属性

局部内部类

静态内部类

匿名内部类

posted @   LiveH  阅读(30)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示