继承

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中继承相关知识点的更多相关文章

  1. Java中继承,类的高级概念的知识点

    1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...

  2. 【Socket编程】Java中网络相关API的应用

    Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...

  3. java中继承thread类的其他类的start()方法与run()方法

    java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...

  4. java中继承,子类是否继承父类的构造函数

    java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...

  5. [转载]Java中继承、装饰者模式和代理模式的区别

    [转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...

  6. java中继承的内存分析

    本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...

  7. 对java中继承、接口、组合的思考

    1.在c++中有继承和多重继承,而java中只有单继承.继承的好处在于可以复用一些东西,但缺陷在于后续不好扩展.此外,可读性方面继承也不好. 2.java中多了一个接口的概念,而接口的功能和其名字表达 ...

  8. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  9. 面试中关于Java中涉及到知识点(转)

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  10. java中的小知识点

    1.数据类型的相关知识点 1.1.java内置封装类的转换 java中内置的封装类Byte.Integer.Float.Double和Long都可以转换成double类型的数值:因为这些封装好的类中都 ...

随机推荐

  1. oracle学习之索引的介绍

    在关系型数据库中,用户查找数据与行的物理位置无关紧要.为了能够找到数据,表中的每一行均用一个rowid来标识,rowid能够标识数据库中某一行的具体位置.当Oracle数据库中存储海量的记录时,就意味 ...

  2. BIP设计器代码不生效的问题解决方案

    bip高级设计器里的前端代码:0租户问题解决在iuap_yonbuilder_service库里的hpa_extcode表hpa_extcode表里搜索billno字段,对应高级设计器里的单据编码拿到 ...

  3. 一些开源软件的LOGO

    整理一些开源软件的logo或者吉祥物,主要是一些以动物形象为主的logo. 1. GNU,不是一个软件,而是一个软件组织,包括很多知名的软件例如GCC编译器. GNU的LOGO是一只牛. GCC的lo ...

  4. 2021年RT-Thread开发者大会

    Time:2021-12-18,地点:大中华6楼喜来登酒店 主办方: RT-Thread:寓意实时线程,瑞赛德 世界有成千上万个 RTOS(Real-time operating system,实时操 ...

  5. webp图像格式

    WebP图像格式 这是支持在互联网上无损和有损图像质量压缩的新格式. 谷歌公司开发这种格式专为在网上迅速和方便地做好工作. 其主要优点是,相对于其他图像格式,文件小,但图像质量相似. 打开: WIND ...

  6. php redis使用 常用方法 | Windows环境下安装Redis | Windows下php安装redis扩展(详解版)

    redis可视化工具:http://www.treesoft.cn/dms.html #php redis使用 常用方法 https://www.cnblogs.com/mg007/p/1043107 ...

  7. 排序算法 | JS

    1.冒泡排序 function bubbleSort(arr,order){ let len = arr.length-1,flag=true for(let i=0;(i<len)&& ...

  8. RNN,LSTM,BERT

    目录 RNN LSTM 计算公式 参数量计算 self-attention bert 论文 源码 问题 问题:bert中进行ner为什么没有使用crf:使用DL进行序列标注问题的时候CRF是必备嘛(t ...

  9. css - 预编译less下,解决深度选择器失效问题,完成css样式修改

    #若深度选择器有效.使用此可修改样式 /deep/ .cube-btn{ //...自定义css样式 } #深度选择器失效,则: 1.重新定义deep深度选择器 @deep:~'>>> ...

  10. 2019-2020-1 20199318《Linux内核原理与分析》第十一周作业

    <Linux内核原理与分析> 第十一周作业 一.预备知识 什么是ShellShock? Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全 ...