Java继承的问题引导和测试代码
作者:!flameking 发布时间:2023-03-13 18:50:34
1.1、定义
从现有类派生的类被称作子类,也叫派生类,扩展类,或孩子类。现有类被称作超类,也叫基类,或父类。
1.2、创建子类
public class Person {}
public class Teacher extends Person{}
1.3、继承的基本规则
1. 子类可以继承除父类构造函数以外的一切成员
为什么子类没有继承父类的构造函数 ?
父类构造函数无法预知子类新增的属性和方法,所以不能被继承
2. 虽然子类继承了父类的私有成员,但子类并不能直接访问,如果想要访问私有成员必须借助父类的公共接口。
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Teacher extends Person{
// 方法覆盖
public String getName() {
// super 调用父类的功能接口
return super.getName() + "校长";
}
}
public class Test {
public static void main(String... args) {
Teacher flameking = new Teacher();
System.out.println( flameking.getName() );
}
}
测试结果:
小结:
super.getName() + "校长"; 这样便能访问父类私有的 name 属性 。所以在子类中可以通过super.父类公共接口 的形式,访问父类的私有成员。
3. 只支持单一继承,不支持多重继承,但支持多层继承
解释:除了Object 没有父类,每个类有且仅有一个直接父类,如果没有明确指出父类,Object 被认为是这个类的父类。
也许有同学就会问了,既然 Object 是所有类的父类,那么为什么还可以继承其他类呢?
正如解释里所说:“没有明确指出父类,Object 被认为是这个类的父类。”
没有明确指出父类
public class Person {}
public class Teacher {}
继承关系是这样的:
继承后
public class Teacher extends Person{}
继承关系如下:
也许有同学又会问:既然不能多重继承了,那我要同时继承多个类的功能该怎么办呢?解决办法如下:
// 第一种方式(✖️)
public class Person {}
public class Employee {}
public class Teacher extends Person,Employee {}
// 第二种方式(✔️)
public class Person {}
public class Employee extends Person {}
public class Teacher extends Employee {}
小结:
如上,既然不能多重继承,那么利用多层继承的方式便能同时继承多个类的功能。
1.4、阻止继承
当我们在创建一个新类时,现有某个类包含我们想要的代码,那么让这个新类继承它,这样我们就不用重新编写代码,就可以复用已存在的属性和方法。可是有某个同学他偏偏不想让别人利用他的代码…
那他怎么做才能让自己的代码不被别人继承呢?
1.4.1、final修饰符
1. final 修饰的类不能被继承
使用方法:
public final class Person {}
效果显示:
2. final 修饰的方法不能被覆盖
3. final 修饰的变量(成员变量和局部变量)必须显式初始化,且只能初始化一次。
修改 final 局部变量 的取值
public class Test {
public static void main(String... args) {
final int temp;
temp = 1;
temp = 2;
}
}
报错提示:
final成员变量未显式初始化
public class Person {
private final String name;
}
报错提示:
4. 常量定义的标准格式
public static final 数据类型 常量名=赋值
常量名:大写字符,如果有多个,用下划线连接
private 修饰的类成员只能在类的内部访问,这是由面向对象的封装性决定的
来源:https://blog.csdn.net/qq_48299903/article/details/119853131


猜你喜欢
- 今天学习到了SpringBoot 的属性赋值@Value用法先总结@Value(" 张三 "):直接附在属性名上,在Be
- 字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位。 坏处是计算
- 之前项目总会遇到很多搜索框类的功能,虽然不是很复杂,不过每次都要去自己处理数据,并且去处理搜索框的变化,写起来也比较麻烦,今天来做一个比较简
- 本文实例讲述了C#使用Ado.Net更新和添加数据到Excel表格的方法。分享给大家供大家参考。具体分析如下:微软NET提供了一个交互的方法
- 由于最近的工作需要用到文本转语音的功能,在网上找到的资料有些不完整,特此记录下整个完整功能。这种方式的优点在于不会被浏览器限制,在js的文本
- 本文实例为大家分享了JavaMail实现带附件的邮件发送的具体代码,供大家参考,具体内容如下发送纯文本的邮件package com.haiw
- 本文实例为大家分享了C#实现验证码功能的具体代码,供大家参考,具体内容如下分析需要四个字符(字母(大小写)+数字)将四个字符连接成字符串将连
- 首先,良好的编码规范非常重要。在 java 程序中,访问速度、资源紧张等问题的大部分原因,都是代码不规范造成的。单例的使用场景单例模式对于减
- 前言这里主要探讨中断常用的三个方法:interrupt()。在一个线程中调用需要中断现成的interrupt()方法,会对该线程发出信号,将
- Redis不仅可作为缓存服务器,还可以用作消息队列。它的列表类型天生支持用作消息队列。如下图所示:由于Redis的列表是使用双向链表实现的,
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例讲述了C#控件闪烁的解决方法。分享给大家供大家参考。具体分析如下:如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在
- 这是入门的第三天了,从简单的hello spring开始,已经慢慢接近web的样子。接下来当然是读取简单的对象属性了。于是按照网上各位大神教
- Android EditText限制输入字符的方法总结最近项目要求限制密码输入的字符类型, 例如不能输入中文。 &nb
- 今天研究了一下scope的作用域。默认是单例模式,即scope="singleton"。另外scope还有prototy
- 前言悬浮窗是一种比较常见的需求。例如把视频通话界面缩小成一个悬浮窗,然后用户可以在其他界面上处理事情。本文给出一个简单的应用内悬浮窗实现。可
- 零、关于HibernateHibernate是冬眠的意思,它是指动物的冬眠,但是本文讨论的Hibernate却与冬眠毫无关系,而是接下来要讨
- 两张表SystemParam(系统参数表) Suit (主题)SystemParam 与 Suit 是多对一Suit 的higerSuit字
- 一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:String name;性别:String gender;下一个节点
- 本文实例为大家分享了Android实现简单手电筒功能的具体代码,供大家参考,具体内容如下XML:<?xml version="