当前位置: 首页 > news >正文

Java 面向对象核心知识详解

java 是一门面向对象的编程语言,面向对象编程(OOP)思想是 Java 编程的核心。下面我们就来深入探讨 Java 面向对象的关键内容。

一、面向对象基础

面向对象编程以 “对象” 为核心,将现实世界中的事物抽象为程序中的对象,对象包含数据(属性)和操作数据的行为(方法)。在 Java 中,通过类来定义对象的模板,然后基于类创建对象(实例)。例如,我们要表示 “汽车” 这个事物,会定义一个 Car 类,包含汽车的属性(如颜色、品牌、速度等)和方法(如启动、加速、刹车等),然后创建具体的 Car 对象。

二、三大特性:封装、继承、多态

(一)封装

封装是指将对象的属性和方法隐藏在类的内部,仅对外提供有限的访问接口。通过封装,可以保护数据的安全性,防止外部直接修改对象的内部状态,同时也能简化外部对对象的使用。在 Java 中,实现封装主要通过访问修饰符(privatedefaultprotectedpublic)来控制类、属性和方法的访问权限。通常将属性设置为 private(私有),然后提供 public(公共)的 getter 和 setter 方法来访问和修改属性。例如:

public class Person {// 私有属性,外部无法直接访问private String name;private int age;// 公共的 getter 方法,用于获取 name 属性public String getName() {return name;}// 公共的 setter 方法,用于设置 name 属性public void setName(String name) {this.name = name;}// 公共的 getter 方法,用于获取 age 属性public int getAge() {return age;}// 公共的 setter 方法,用于设置 age 属性,同时可以添加逻辑(如年龄验证)public void setAge(int age) {if (age >= 0 && age <= 120) {this.age = age;} else {System.out.println("年龄不合法!");}}
}

(二)继承

继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,子类还可以在父类的基础上进行扩展,添加新的属性和方法,或者重写父类的方法。继承实现了代码的复用,让类之间形成层次结构。Java 中使用 extends 关键字实现继承,且是单继承(一个类只能直接继承一个父类),但可以通过接口实现多继承的效果。例如:

// 父类
public class Animal {protected String name;public void eat() {System.out.println(name + " 在吃东西");}
}
// 子类,继承 Animal 类
public class Dog extends Animal {// 子类添加自己的属性private String breed;// 子类重写父类的 eat 方法@Overridepublic void eat() {System.out.println(name + "(品种:" + breed + ")在吃骨头");}// 子类添加自己的方法public void bark() {System.out.println(name + " 在汪汪叫");}
}

(三)多态

多态是指同一个行为具有多种不同的表现形式。在 Java 中,多态的实现主要依赖于继承、方法重写和父类引用指向子类对象。多态使得程序更加灵活,提高了代码的可扩展性。例如,我们有一个父类 Shape(形状),子类 Circle(圆形)和 Rectangle(矩形)都继承自 Shape,并且重写了 Shape 中的 draw(绘制)方法:

public class Shape {public void draw() {System.out.println("绘制形状");}
}
public class Circle extends Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}
}
public class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("绘制矩形");}
}
// 测试多态
public class Test {public static void main(String[] args) {// 父类引用指向子类对象,体现多态Shape shape1 = new Circle();Shape shape2 = new Rectangle();shape1.draw(); // 输出:绘制圆形shape2.draw(); // 输出:绘制矩形}
}

三、内部类

内部类是定义在另一个类内部的类。内部类可以访问外部类的所有成员(包括私有成员),根据定义的位置和方式不同,内部类分为成员内部类、局部内部类、匿名内部类和静态内部类。

(一)匿名内部类

匿名内部类是一种特殊的局部内部类,它没有类名,通常用于创建只需要使用一次的类的实例,经常和接口或抽象类配合使用。例如,我们有一个接口 MyInterface

public interface MyInterface {void doSomething();
}
// 使用匿名内部类实现接口
public class Test {public static void main(String[] args) {MyInterface obj = new MyInterface() {@Overridepublic void doSomething() {System.out.println("执行 doSomething 方法");}};obj.doSomething(); // 输出:执行 doSomething 方法}
}

匿名内部类在事件监听、线程创建等场景中非常常用,比如创建一个线程:

new Thread(new Runnable() {@Overridepublic void run() {System.out.println("线程执行中...");}
}).start();

四、抽象类

抽象类是使用 abstract 关键字修饰的类,抽象类不能被实例化,只能被继承。抽象类中可以包含抽象方法(使用 abstract 修饰,只有方法声明,没有方法体)和普通方法。子类继承抽象类后,必须重写抽象类中的所有抽象方法(除非子类也是抽象类)。抽象类用于定义一些通用的模板,让子类去实现具体的细节。例如:

public abstract class Animal {protected String name;// 抽象方法,子类必须重写public abstract void makeSound();// 普通方法public void eat() {System.out.println(name + " 在吃东西");}
}
public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println(name + " 喵喵叫");}
}

五、接口

接口是一种完全抽象的类型,使用 interface 关键字定义。接口中只能包含常量(默认 public static final)和抽象方法(Java 8 之前),Java 8 及以后允许在接口中定义默认方法(default 修饰)和静态方法(static 修饰),Java 9 及以后还允许定义私有方法。类可以通过 implements 关键字实现一个或多个接口,实现接口的类必须重写接口中的所有抽象方法(除非类是抽象类)。接口用于定义类的行为规范,实现了类的多继承能力。例如:

public interface Flyable {void fly();// 默认方法default void land() {System.out.println("降落");}
}
public interface Swimmable {void swim();
}
// 类实现多个接口
public class Duck implements Flyable, Swimmable {@Overridepublic void fly() {System.out.println("鸭子飞翔");}@Overridepublic void swim() {System.out.println("鸭子游泳");}
}

六、父子类之间转换

(一)向上转型

向上转型是指将子类对象赋值给父类引用,这是自动进行的。向上转型后,只能调用父类中定义的方法和属性,子类特有的方法和属性无法直接调用。向上转型体现了多态的思想。例如前面提到的 Shape 类和 Circle 类的例子,Shape shape = new Circle(); 就是向上转型。

(二)向下转型

向下转型是指将父类引用转换为子类引用,需要使用强制类型转换。向下转型之前,通常需要使用 instanceof 关键字判断父类引用指向的对象是否是目标子类的实例,否则可能会发生 ClassCastException(类型转换异常)。例如:

Shape shape = new Circle();
if (shape instanceof Circle) {// 向下转型Circle circle = (Circle)shape;circle.draw(); // 可以调用 Circle 类特有的方法(如果有的话)
}

七、Object 基类

Object 类是 Java 中所有类的根类,每个类都直接或间接继承自 Object 类。Object 类中定义了一些通用的方法,如 equals()(用于比较对象是否相等)、hashCode()(返回对象的哈希码)、toString()(返回对象的字符串表示)、getClass()(获取对象的类信息)、clone()(用于对象的克隆)、finalize()(在对象被垃圾回收前调用)、wait()notify()notifyAll()(用于线程同步)等。子类可以根据需要重写这些方法,以实现特定的功能。例如,重写 toString() 方法:

public class Person {private String name;private int age;@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}// 其他代码...
}

Java 面向对象的这些知识是 Java 编程的核心基石,掌握好它们,能让我们更好地进行 Java 应用开发,编写出结构清晰、可维护性高的代码。

http://www.dtcms.com/a/507694.html

相关文章:

  • SpringCloud 架构在智慧交通路侧停车系统中的实践:从技术落地到城市级服务升级
  • SQLITE数据库完成数据增删改查
  • 企业高端网站建设凡客登录
  • AIOT定义Web3健康新纪元:从智能硬件到健康金融
  • 【学习系列】SAP RAP 13:行为定义-Business Event
  • 网站规划的主要内容宁波网站关键词优化代码
  • Android 中进程间通信方式
  • Android ANR 详解与实战分析:原理、监测、优化全指南(含面试高频问题)
  • 基于DSP28027的流水灯实验
  • 视频图像数据库基础服务
  • 做外贸的社交网站网站基础上添加建设方案模板
  • php网站开发工程师面试郑州网站优化渠道
  • Vue3和vue2的Diff算法有何差异?
  • C# 设计模式——观察者
  • 提供网站建设设计江西建设网站
  • 漂亮的学校网站模板下载网站建设专业性评价内容
  • 手机建设中网站做推广赚钱的网站有哪些
  • Builder 设计模式
  • 重庆永川网站建设报价什么网站必须要flash
  • 接口自动化测试概念
  • 嵌入式软件中负数如何存储
  • 【运维心得】bitlocker未解之谜:34.3%的诅咒
  • AUTOSAR图解==>AUTOSAR_AP_TR_DDSSecurityIntegration
  • 何超携Iman新马宣传 新片《拾荒法师2》将开拍
  • 实体-联系(E-R)模型
  • 网站开发的调研内容小程序制作方案书
  • 『 QT 』QT控件属性全解析 (一)
  • 临床研究标志物发现与机制探索:纯数据挖掘与“实验+服务”一站式方案,如何选择?
  • 辽宁省网站制作网站建站对象
  • 使用 PyQt5 和 PIL 打造 GIF 圆角处理工具