Java中继承相关知识点
继承
1.继承概述
继承是面向对象的三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
1.1 继承的格式
- 格式:public class 子类名 extends 父类名{}
- 范例:public class Zi extends Fu{}
- Fu:父类,也叫基类、超类
- Zi:子类,也叫派生类
1.2 继承中子类的特点
- 子类可以有父类的内容
- 子类还可以有自己特有的内容
2.继承的好处和弊端
好处:
- 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
- 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
弊端:
继承让类和类之间产生了关系,类的耦合性增强了,当父类中发生变化时子类实现也不得不跟着发生变化,削弱了子类的独立性。
什么时候使用继承?
假设法:
有两个类A和B,如果他们满足A是B得一种或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑用继承来实现,否则就不能乱用继承
举例:
水果和苹果,猫和动物,猫和狗
3.继承中变量的访问特点
在子类方法中访问一个变量:
- 先在子类方法中的范围找
- 在子类成员范围找
- 在父类成员范围找
- 如果都没有就报错,不考虑父类的父类
4.super关键字
super关键字和this关键字的用法相似
- this:代表本类对象的引用
- super:代表父类对象的引用(父类存储空间的标识)
| 关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
|---|---|---|---|
| this | this.成员变量:访问本类中的成员变量 | this(...):访问本类的构造方法 | this.成员方法(...):访问本类的成员方法 |
| super | super.成员变量:访问父类的成员变量 | super(...):访问父类的构造方法 | super.成员方法:访问父类的成员方法 |
示例:
父类
package com.itheima_04;
public class Father {
public int age = 40;
}
子类
package com.itheima_04;
public class Son extends Father {
public int age = 30;
public void show(){
int age = 10;
//访问方法中的age
System.out.println(age);
//访问子类中的age
System.out.println(this.age);
//访问父类中的age
System.out.println(super.age);
}
}
测试类
package com.itheima_04;
public class Test {
public static void main(String[] args) {
Son s = new Son();
s.show();
}
}
5.继承中构造方法的访问特点
子类中所有的构造方法都默认会访问父类中无参的构造方法
- 因为子类要继承父类中的数据,可能还会使用父类中的数据。所以子类初始化之前,一定要先完成对父类的初始化。
- 每一个子类构造方法的第一条语句默认都是:super()
6.方法重写
方法重写概述
- 子类中出现了和父类中一模一样的方法声明
方法重写的应用
- 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能又定义了子类特有的内容
@Override
- 是一个注解
- 可以帮助我们检查重写方法的方法声明的正确性
示例:
Phone
package itheima_05;
//手机类
public class Phone {
public void call(String name){
System.out.println("给" + name + "打电话!");
}
}
NewPhone
package itheima_05;
//新式手机
public class NewPhone extends Phone{
@Override //注解,可以帮助检查方法声明的正确性
public void call(String name){
System.out.println("开启视频功能");
super.call(name);
}
}
PhoneDemo
package itheima_05;
//测试类
public class PhoneDemo {
public static void main(String[] args) {
//创建对象
Phone phone = new Phone();
phone.call("蓝头发妹妹");
System.out.println("============");
NewPhone newPhone = new NewPhone();
newPhone.call("蓝头发妹妹");
}
}
7.重写的注意事项
- 私有方法不能被重写(父类私有成员子类是不能继承的)
- 子类方法访问权限不能比父类方法中的访问权限低
8.继承的注意事项
- Java中的类只支持单继承,不支持多继承
- Java中类是支持多层继承的
Java中继承相关知识点的更多相关文章
- Java中继承,类的高级概念的知识点
1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...
- 【Socket编程】Java中网络相关API的应用
Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...
- java中继承thread类的其他类的start()方法与run()方法
java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...
- java中继承,子类是否继承父类的构造函数
java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- java中继承的内存分析
本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...
- 对java中继承、接口、组合的思考
1.在c++中有继承和多重继承,而java中只有单继承.继承的好处在于可以复用一些东西,但缺陷在于后续不好扩展.此外,可读性方面继承也不好. 2.java中多了一个接口的概念,而接口的功能和其名字表达 ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- 面试中关于Java中涉及到知识点(转)
本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...
- java中的小知识点
1.数据类型的相关知识点 1.1.java内置封装类的转换 java中内置的封装类Byte.Integer.Float.Double和Long都可以转换成double类型的数值:因为这些封装好的类中都 ...
随机推荐
- JAVA格式化数字
DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(100.1234)); // ...
- 【git】3.3 git分支-分支管理
资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86 ...
- [Oracle19C 数据库管理] 用户与权限管理
用户管理 用户具有以下属性: 用户名: 不能超过30位.不能包含特殊字符.必须用字符开头.用户名不区分大小写. 认证方式: 最常见的是密码认证. 默认永久表空间: 控制用户可以在哪个表空间里创建对象. ...
- String类对象的常用操作及方法
在Java中,String类包含有50多个方法来实现字符串的各种操作,以下介绍一些我们需要经常使用的方法.1.字符串的连接public String concat(String str) 该方法的参数 ...
- PowerShell学习笔记二_变量、Select、Foreach、where、自动变量
变量声明/定义变量使用$作为前缀,例如:$A.$var等.定义一:$mysqlservice=Get-Service -Name mysql ,获取mysql服务对象获取所有服务$services=G ...
- Python 元组tuple、 列表list、 字典dict、集合set、迭代器、生成器
一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...
- Skywalking安装
https://www.cnblogs.com/duanxz/p/15602842.html
- Tensorflow框架实现中的“三”种图
https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...
- k8s各个服务和执行流程介绍
Master节点部署的都是kubernetes的核心模块 APIServer 提供资源操作的唯一入口,并且提供认证/授权/kubernets的访问控制可以通过kubectl和自己开发的客户端,通过ht ...
- 【C++复习】第八章 多态性(1)(多态类型、运算符重载)
1.多态性 1.1 什么是多态? 多态是指相同消息被不同对象接收后导致不同的行为,所谓消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数. 消息在C++编程中指的是对类的成员 ...