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

【2025】Java 从入门到实战:核心特性全解析(方法、类与对象、多态三大特性及关键字thissuper)附带代码案例

前言

        Java 作为一门纯面向对象编程语言,其核心思想围绕 "类与对象" 展开。本文将系统讲解 Java 面向对象编程的核心概念,包括类与对象、方法、方法重载与重写、封装、继承、多态以及 this 与 super 关键字的使用,帮助初学者快速掌握面向对象编程精髓。

一、类与对象

1.1 概念

  • 类 (Class):是对一类事物的抽象描述,定义了这类事物的属性和行为,是创建对象的模板。
  • 对象 (Object):是类的具体实例,拥有类定义的属性和行为。

例如:"汽车" 是类,而你家的那辆红色宝马就是对象。

1.2 语法与示例

// 定义类
public class Car {// 属性(成员变量)String color;  // 颜色String brand;  // 品牌int speed;     // 速度// 行为(方法)// 加速public void accelerate() {speed += 10;System.out.println(brand + "正在加速,当前速度:" + speed + "km/h");}// 刹车public void brake() {speed = 0;System.out.println(brand + "已刹车,当前速度:" + speed + "km/h");}public static void main(String[] args) {// 创建对象Car bmw = new Car();// 给对象属性赋值bmw.color = "红色";bmw.brand = "宝马";bmw.speed = 0;// 调用对象方法bmw.accelerate();  // 宝马正在加速,当前速度:10km/hbmw.accelerate();  // 宝马正在加速,当前速度:20km/hbmw.brake();       // 宝马已刹车,当前速度:0km/h// 创建另一个对象Car benz = new Car();benz.color = "黑色";benz.brand = "奔驰";benz.speed = 0;benz.accelerate();  // 奔驰正在加速,当前速度:10km/h}
}

二、方法详解

2.1 方法的概念与结构

方法是类中定义的行为,用于实现特定功能。方法的基本结构:

修饰符 返回值类型 方法名(参数列表) {// 方法体return 返回值;  // void类型不需要return
}

2.2 方法的分类

  • 无参无返回值
  • 有参无返回值
  • 无参有返回值
  • 有参有返回值

示例:

public class MethodDemo {// 无参无返回值public void sayHello() {System.out.println("Hello World!");}// 有参无返回值public void printInfo(String name, int age) {System.out.println("姓名:" + name + ",年龄:" + age);}// 无参有返回值public int getRandomNumber() {return (int)(Math.random() * 100);}// 有参有返回值public int add(int a, int b) {return a + b;}public static void main(String[] args) {MethodDemo demo = new MethodDemo();demo.sayHello();demo.printInfo("张三", 20);System.out.println("随机数:" + demo.getRandomNumber());System.out.println("两数之和:" + demo.add(10, 20));}
}

三、方法重载 (Overload)

3.1 概念

方法重载指在同一个类中,允许存在多个同名方法,但这些方法的参数列表必须不同(参数个数不同或参数类型不同)。

3.2 特点

  • 方法名必须相同
  • 参数列表必须不同(个数、类型、顺序)
  • 返回值类型可以不同
  • 修饰符可以不同

3.3 示例

public class OverloadDemo {// 计算两个整数的和public int add(int a, int b) {return a + b;}// 计算三个整数的和(参数个数不同)public int add(int a, int b, int c) {return a + b + c;}// 计算两个小数的和(参数类型不同)public double add(double a, double b) {return a + b;}// 计算一个整数和一个小数的和(参数顺序不同)public double add(int a, double b) {return a + b;}public static void main(String[] args) {OverloadDemo demo = new OverloadDemo();System.out.println(demo.add(10, 20));        // 30System.out.println(demo.add(10, 20, 30));    // 60System.out.println(demo.add(10.5, 20.5));    // 31.0System.out.println(demo.add(10, 20.5));      // 30.5}
}

四、封装 (Encapsulation)

4.1 概念

封装是指将对象的属性和行为封装起来,只暴露必要的接口与外界交互,隐藏内部实现细节。

4.2 实现方式

  • 使用 private 修饰成员变量,限制直接访问
  • 提供 public 修饰的 getter 和 setter 方法,用于访问和修改成员变量

4.3 示例

public class Student {// 私有属性,外部不能直接访问private String name;private int age;// 公共的getter和setter方法public String getName() {return name;}public void setName(String name) {// 可以在setter中添加验证逻辑if (name != null && name.length() > 0) {this.name = name;} else {System.out.println("姓名不能为空");}}public int getAge() {return age;}public void setAge(int age) {// 年龄必须在合理范围内if (age > 0 && age < 150) {this.age = age;} else {System.out.println("年龄必须在0-150之间");}}public void study() {System.out.println(name + "正在学习");}public static void main(String[] args) {Student student = new Student();student.setName("");  // 姓名不能为空student.setName("张三");student.setAge(200);  // 年龄必须在0-150之间student.setAge(20);System.out.println("姓名:" + student.getName() + ",年龄:" + student.getAge());student.study();  // 张三正在学习}
}

五、继承 (Inheritance)

5.1 概念

继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,从而实现代码复用。Java 中使用 extends 关键字实现继承,且只支持单继承。

5.2 特点

  • 子类拥有父类非 private 的属性和方法
  • 子类可以扩展自己的属性和方法
  • 子类可以重写父类的方法

5.3 示例

// 父类:动物
class Animal {String name;public void eat() {System.out.println(name + "在吃东西");}public void sleep() {System.out.println(name + "在睡觉");}
}// 子类:狗(继承自动物)
class Dog extends Animal {// 子类扩展自己的方法public void bark() {System.out.println(name + "在汪汪叫");}
}// 子类:猫(继承自动物)
class Cat extends Animal {// 子类扩展自己的方法public void meow() {System.out.println(name + "在喵喵叫");}
}public class InheritanceDemo {public static void main(String[] args) {Dog dog = new Dog();dog.name = "旺财";dog.eat();   // 继承自父类的方法dog.sleep(); // 继承自父类的方法dog.bark();  // 子类自己的方法Cat cat = new Cat();cat.name = "咪咪";cat.eat();   // 继承自父类的方法cat.sleep(); // 继承自父类的方法cat.meow();  // 子类自己的方法}
}

六、方法重写 (Override)

6.1 概念

方法重写指子类可以重写父类的方法,以实现子类特有的功能。

6.2 规则

  • 方法名、参数列表必须与父类完全相同
  • 返回值类型必须与父类相同或为其子类型
  • 访问修饰符不能严于父类
  • 不能抛出比父类更多或更广泛的异常

6.3 示例

// 父类
class Shape {public void draw() {System.out.println("绘制图形");}
}// 子类:圆形
class Circle extends Shape {// 重写父类的draw方法@Override  // 注解,检查是否正确重写public void draw() {System.out.println("绘制圆形");}
}// 子类:矩形
class Rectangle extends Shape {// 重写父类的draw方法@Overridepublic void draw() {System.out.println("绘制矩形");}
}public class OverrideDemo {public static void main(String[] args) {Shape shape1 = new Circle();Shape shape2 = new Rectangle();shape1.draw();  // 绘制圆形shape2.draw();  // 绘制矩形}
}

6.4 重载与重写的区别

区别点方法重载 (Overload)方法重写 (Override)
定义同一个类中,方法名相同,参数列表不同子类中,方法名、参数列表与父类相同
返回值可以不同必须相同或为其子类型
访问修饰符可以不同不能严于父类
多态性不体现多态体现多态
关联编译时多态运行时多态

七、多态 (Polymorphism)

7.1 概念

多态是指同一操作作用于不同对象,可以产生不同的执行结果。多态的实现需要满足三个条件:

  1. 存在继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

7.2 示例

// 父类:交通工具
class Vehicle {public void run() {System.out.println("交通工具在行驶");}
}// 子类:汽车
class Car extends Vehicle {@Overridepublic void run() {System.out.println("汽车在公路上行驶");}
}// 子类:飞机
class Plane extends Vehicle {@Overridepublic void run() {System.out.println("飞机在天空中飞行");}
}// 子类:轮船
class Ship extends Vehicle {@Overridepublic void run() {System.out.println("轮船在海上航行");}
}public class PolymorphismDemo {// 测试方法,接收父类类型参数public static void testRun(Vehicle vehicle) {vehicle.run();}public static void main(String[] args) {// 父类引用指向子类对象Vehicle car = new Car();Vehicle plane = new Plane();Vehicle ship = new Ship();testRun(car);   // 汽车在公路上行驶testRun(plane); // 飞机在天空中飞行testRun(ship);  // 轮船在海上航行}
}

八、this 与 super 关键字

8.1 this 关键字

this 代表当前对象的引用,主要用途:

  • 区分成员变量和局部变量
  • 调用当前类的其他构造方法
  • 返回当前对象

示例:

public class ThisDemo {private String name;private int age;// 无参构造public ThisDemo() {this("张三", 18);  // 调用有参构造}// 有参构造public ThisDemo(String name, int age) {this.name = name;  // 区分成员变量和局部变量this.age = age;}public void printInfo() {System.out.println("姓名:" + this.name + ",年龄:" + this.age);}public ThisDemo getThis() {return this;  // 返回当前对象}public static void main(String[] args) {ThisDemo demo1 = new ThisDemo();demo1.printInfo();  // 姓名:张三,年龄:18ThisDemo demo2 = new ThisDemo("李四", 20);demo2.printInfo();  // 姓名:李四,年龄:20System.out.println(demo2 == demo2.getThis());  // true}
}

8.2 super 关键字

super 代表父类对象的引用,主要用途:

  • 访问父类的成员变量
  • 调用父类的方法
  • 调用父类的构造方法

示例:

// 父类
class Person {protected String name;protected int age;public Person(String name, int age) {this.name = name;this.age = age;}public void sayHello() {System.out.println("大家好,我是" + name);}
}// 子类
class Student extends Person {private String school;public Student(String name, int age, String school) {super(name, age);  // 调用父类构造方法this.school = school;}@Overridepublic void sayHello() {super.sayHello();  // 调用父类的sayHello方法System.out.println("我在" + school + "上学");}public void printParentInfo() {System.out.println("父类中的姓名:" + super.name);  // 访问父类的成员变量System.out.println("父类中的年龄:" + super.age);}
}public class SuperDemo {public static void main(String[] args) {Student student = new Student("张三", 20, "北京大学");student.sayHello();/*输出:大家好,我是张三我在北京大学上学*/student.printParentInfo();/*输出:父类中的姓名:张三父类中的年龄:20*/}
}

8.3 this 与 super 的区别

区别点thissuper
概念指向当前对象指向父类对象
访问属性访问当前类的属性访问父类的属性
调用方法调用当前类的方法调用父类的方法
调用构造调用当前类的其他构造调用父类的构造
使用位置可以在构造方法和普通方法中使用可以在构造方法和普通方法中使用
与构造方法必须放在构造方法的第一行(如果使用)必须放在构造方法的第一行,且与 this 不能同时使用

总结

本文详细介绍了 Java 面向对象编程的核心概念,包括:

  • 类与对象:类是模板,对象是实例
  • 方法:类的行为,有多种形式
  • 方法重载:同类中同名不同参的方法
  • 封装:隐藏实现细节,提供接口
  • 继承:子类继承父类,实现代码复用
  • 方法重写:子类重写父类方法,实现多态
  • 多态:同一操作作用于不同对象产生不同结果
  • this 与 super:分别指向当前对象和父类对象

        掌握这些概念是学好 Java 面向对象编程的基础,建议通过大量练习加深理解,灵活运用这些特性编写高效、易维护的 Java 程序。

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

相关文章:

  • FSMC-TFTLCD显示实验(1)
  • Node.js 实现 Stripe 支付的简单示例
  • Claude、Agent与Copilot协作生成Angular应用
  • 建行广东茂名茂南支行:积极走进会展商圈,助力金融赋能消费提振
  • LDO(Low Dropout Regulator)是什么?
  • 专门做win7系统的网站免费金融发布网站模板
  • 网络安全:SQL 注入:SQLmap
  • UI设计公司审美积累|APP界面从风格到功能的设计智慧
  • 分布式专题——57 如何保证MySQL数据库到ES的数据一致性
  • 厦门建站公司哪家好wordpress 虚拟商城
  • 分布式专题——56 微服务日志采集与分析系统实战
  • 团购网站自个做中国最好室内设计公司排名榜
  • 如何使用WPF做工控主页
  • 深入探讨HarmonyOS分布式剪贴板:技术原理与开发实践
  • USB3.0PHY介绍
  • Three.js的阴影相关实现路径
  • WPF转换器机制
  • SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(三)
  • 如何用WPF做工控设置界面
  • ✨WPF编程进阶【7.2】:动画类型(附源码)
  • 建设网站的安全性介绍深圳seo优化排名推广
  • 上海迈诺网站建设东莞专业做网站的公司有哪些
  • 深度学习中的激活函数全解析:该选哪一个?
  • MySQL复盘总结
  • 对于多方安全计算的中止安全的理解
  • 西游记路线图:12-39,大唐到乌鸡国,幕后boss标注
  • 【学习笔记】DiffFNO: Diffusion Fourier Neural Operator
  • 电磁场中的旋度Curl与散度div
  • KCF 算法在ROS 2 操作系统里面(详解)
  • 《Dev-C++分辨率低-解决办法》