Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

news/2024/11/29 20:52:39/

文章目录

  • 一、继承概述
  • 二、内存运行原理
  • 三、继承的特点
  • 四、继承后:成员变量和方法的访问特点
  • 五、继承后:方法重写
  • 六、继承后:子类构造器的特点
  • 七、继承后:子类构造器访问父类有参构造器
  • 八、this、super 总结


一、继承概述

Java 允许一个类通过 extends 关键字与另一个类建立父子关系,这就是继承。

格式: 子类 extends 父类
特点: 子类继承父类后,就可以得到父类的属性和行为。
优点: 提高代码的复用性,多个子类的相同代码可以放在父类中,增强了类的扩展性。

设计规范: 子类共用属性和行为放在父类,子类独有属性和行为放在子类自己那里


二、内存运行原理

public class People{private String name;private int age;/*** 共同行为*/public void queryCourse(){System.out.println(name + "查看课表信息!!");}// getter + setter
}public class Student extends People{private String className;/*** 独有行为*/public void writeInfo(){System.out.println(getName()+" 写作业!!");}// getter + setter
}
public class Test{public static void main(string[] args){Student s = new Student();s.setName("翠花"); // 父类的s.setAge(22); // 父类的s.setclassName("Java就业999期");// 子类的s.queryCourse(); // 父类的s.writeInfo(); // 子类的}
}

学生对象内存图如下:
在这里插入图片描述


三、继承的特点

  1. 子类可以继承父类的属性和行为,但是 子类不能继承父类的构造器

  2. 子类可以继承父类私有成员吗?
    有争议,我认为可以,只是不能直接访问。可通过访问父类的方法,间接访问父类私有成员。

  3. 子类可以直接用子类名访问父类静态成员。那么子类继承了父类静态成员吗?
    我认为没有继承,只能可以共享的去访问父类静态成员,共享并非继承

  4. Java是单继承模式:一个类只能继承一个直接父类。反证法如下:
    在这里插入图片描述

  5. Java 不支持多继承,但是支持多层继承。

  6. Java 中所有的类都是 Object 类的子类。


四、继承后:成员变量和方法的访问特点

采用:就近原则
this.子类自己的成员变量; super.父类成员变量/父类成员方法(父类成员是public)

public class Animal{public String name = "动物的名字";public void run(){System.out.println("动物可以跑~~");}
}public class Dog extends Animal{public String name = "狗的名字";public void run(){System.out.println("狗可以跑~~");}public void showName(){String name = "临时的名字";System.out.println(name); // 访问局部变量nameSystem.out.println(this.name); // 访问子类name。如果没有同名临时变量,name就是子类 name,不用加 thisSystem.out.println(super.name); // 访问父类namesuper.run(); // 访问父类run(); // 访问子类}
}
public class Test {public static void main(String[] args) {// 目标:理解继承后成员的访问特点:就近原则Dog dog = new Dog();dog.run(); // 狗可以跑~~dog.showName();}
}

五、继承后:方法重写

在这里插入图片描述


六、继承后:子类构造器的特点

在这里插入图片描述


七、继承后:子类构造器访问父类有参构造器

在这里插入图片描述


八、this、super 总结

在这里插入图片描述

注意:
子类通过 this(…) 去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器。
super(…) 必须放在第一行,this(…) 也必须在第一行,因此二者不能共存一个构造器中。


文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)


http://www.ppmy.cn/news/58440.html

相关文章

windows的命令行

命令行就是文本交互界面,通过命令行可以使用一个一个的指令来操作计算机 任何的计算机的操作系统中都包含有命令行(windows、linux、macOS) 命令行有多个不同的名字: 命令行、命令行窗口、DOS窗口、命令提示符、CMD窗口、Shell、终…

【LeetCode】64. 最小路径和

64. 最小路径和(中等) 方法一:常规动态规划 思路 定义一个二维 dp 数组,其中 dp[i][j]表示从左上角开始到(i, j)位置的最优路径的数字和。因为每次都只能向下或者向右移动,所以很容易发现 dp数组…

Tkinter正则表达式工具

文章目录 🏳️‍🌈 1. 导入tkinter和re模块🏳️‍🌈 2. 设置窗口居中🏳️‍🌈 3. 设置lable、text、button布局🏳️‍🌈 4. 设置下拉列表框🏳️‍🌈 5. 清空文…

【python】python 操作sqlite 日期的工具类

在Python中,可以使用datetime模块来操作日期和时间。该模块提供了许多方法和属性,使得我们可以方便地创建、比较和格式化日期和时间对象。 在SQLite中,日期和时间被存储为文本字符串,格式为YYYY-MM-DD(日期)和HH:MM:SS.SSS(时间),其中SS.SSS表示秒和毫秒。SQLite还提…

验证二叉搜索树-递归双指针法

1题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…

96. 不同的二叉搜索树

目录 1、题目描述 2、思路:动态规划 2.2、确定递推公式 2.3、dp数组初始化 2.4、确定遍历顺序 3、C实现如下 1、题目描述 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜…

Mybatis读取和存储json类型的数据

目录 一、测试使用JSONObject来获取json二、设置TableName的autoResultMap为true,TableField的typeHandler为JacksonTypeHandler.class三、设置xml当中的resultMap四、JacksonTypeHandler讲解五、新增假如是JSONObject异常问题六、遇到转义的问题 不管数据库当中是以…

ospf扩展配置—认证、沉默接口、加快收敛、缺省路由

目录标题 认证接口认证区域认证虚链路认证 沉默接口加快收敛缺省路由3类缺省5类缺省7类缺省 总结 认证 在直连的邻居或邻接之间,配置身份核实秘钥来保障邻居、邻接间数据沟通的安全性 接口认证 在这连连接的接口上配置 [r6-GigabitEthernet0/0/1]ospf authentic…