java面向对象三大特性,继承篇

简介: 1.继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。


1.继承的概念


继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。


继承可以解决代码复用的问题,极大的提高代码的简洁性✌


2.继承原理图



3.类的继承格式


在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:


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


接下演示一个继承的实例:

我们先写一个父类:


/**
 * 三大特性:继承演示的父类
 */
public class Inherit {
    // 共有的属性
    public String name;
    public int age;
    private double score;
    // 共有的方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public void showInfo() {
        System.out.println("学生姓名:" + name + " 年龄:" + age +
                " 成绩:" + score);
    }
}


写一个小学生类继承这个父类:


/**
 * 小学生,继承父类的子类
 */
public class Pupil extends Inherit {
    // 小学生独有的方法
    public void say() {
        System.out.println("爱你孤身走暗巷~");
    }
}


再写一个大学生继承这个父类:


/**
 * 大学生,继承父类的子类
 */
public class Graduate extends Inherit {
    public void say() {
        System.out.println("我是大学生,我叫:" + name);
    }
}


测试类:


/**
 * 继承演示的测试类
 */
public class InheritTest {
    public static void main(String[] args) {
        Pupil pupil = new Pupil();
        pupil.setName("王强");
        pupil.setAge(12);
        pupil.setScore(100);
        pupil.say();  // 爱你孤身走暗巷~
        pupil.showInfo();  // 学生姓名:王强 年龄:12 成绩:100.0
        Graduate graduate = new Graduate();
        graduate.setName("大河");
        graduate.setAge(22);
        graduate.setScore(60);
        graduate.say();  // 我是大学生,我叫:大河
        graduate.showInfo();  // 学生姓名:大河 年龄:22 成绩:60.0
    }
}


4.继承的小细节


私有属性和方法的继承:


私有属性和方法不能在子类直接访问,要通过公共的方法去访问


上述程序中,我们对score属性做了private的访问修饰,随后发现在子类无法访问这个属性,那么应该怎么做呢?🐱‍🐉


可以看到,我们通过封装完美解决了这个问题,而封装的方法的访问权限应该设置为public✨


子类必须首先调用父类的构造器,完成对父类的初始化:


我们的父类:


// 父类的无参构造
public Inherit() {
    System.out.println("父类的无参构造执行~");
}


我们的子类:


// 子类的无参构造
public Pupil() {
    System.out.println("子类的无参构造执行~");
}


当我们新建子类的对象时,会输出如下:(首先初始化父类的构造器,再初始化子类的构造器)


父类的无参构造执行~
子类的无参构造执行~


需要说明的是,默认情况下总会去调用父类的无参构造器,如果父类没有提供一个无参构造器,则必须在子类使用super指定父类的构造器,否则会发生一个错误!❌


如果希望指定去调用父类的某个构造器,则显式的调用以下,使用super关键字


super在使用时,必须放在构造器的第一行,this也是同样的,所以他们不能共存使用


另外,java中所有的类都是Object的子类:👴🏻



需要注意的是 Java 不支持多继承,但支持多重继承:



5.继承的本质


现在我们来分析如下的代码块:



加载类的时候,首先会加载Object类(祖宗类),随后加载GrandPa类 - Father类 - Son类

随后会创建对象的堆空间,并在堆中分配空间,首先并分配GrandPa的属性

分配Father的属性,虽然和GrandPa的属性有冲突💥,但是java会选择开辟一个新的空间存放

分配Son的属性,同Father

返回堆中的地址给son



现在我们再来看,如果执行了下面的这行代码,它会输出什么信息呢?


System.out.println(son.name);


这时候就需要按照查找关系来返回信息啦!就近原则🚀



综合上述,显然它会输出:大头儿子


谨记:当属性按照就近原则向上查找时,一旦遇到一个不能访问的错误(存在该属性但是权限不不够),就会停止查找,产生一个编译错误🤳

目录
相关文章
|
3月前
|
安全 Java API
Java 17 + 特性与现代开发技术实操应用详解
本指南聚焦Java 17+最新技术,涵盖模块化开发、Record类、模式匹配、文本块、Stream API增强、虚拟线程等核心特性,结合Spring Boot 3与Micronaut框架实战。通过实操案例解析现代Java开发技术栈,包括高性能并发编程、GraalVM原生编译及开发工具链配置。同时梳理面试高频考点,助力掌握Java新特性和实际应用,适合学习与项目实践。代码示例丰富,附带完整资源下载链接。
335 0
|
5月前
|
数据采集 监控 Oracle
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
阿里巴巴是 GraalVM 全球顾问委员会的唯一中国代表,阿里云程序语言与编译器团队和可观测团队合作实现了 GraalVM 应用的无侵入可观测能力,并在 ARMS 平台上线了该功能。目前在 GraalVM 24 中发布的是支持 Java agent 的第一步,其余能力将在 GraalVM 的后续版本中陆续发布。
397 22
|
4月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
147 0
|
2月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
119 1
|
2月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
144 1
|
2月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
98 2
|
2月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
|
4月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
111 0

热门文章

最新文章