继承

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. noi 45 金币

    noi 45 金币 1.描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天)里,每天收到两枚金币:之后三天(第四.五.六天)里,每天收到三枚金币:之后四天( ...

  2. 登录他人mysql

    //登录参数:mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)

  3. tvm中使用了xgboost库中的_fmt_metric

    _fmt_metric这个xgboost的回调函数已经被遗弃了. 为了能跑起来tvm,可以pip install xgboost==1.5.0

  4. laravel常用集合的使用

    创建集合: //数组1 $connection = collect([ ['name'=>'jack','age'=>'18','email'=>'ceshi@qq.com'], [ ...

  5. (四)kafka基础术语

    1 Topic Kafka消息分类的标签,是一个逻辑概念. 2 Partion 主题作为消息的归类,可以细分为一个或多个分区,分区可以看做是对消息的二次归类.分区可以有一个至多个副本,每个副本对应一个 ...

  6. C语言学习--文件操作--文件流指针--打开文件

    当打开一个文件时, 系统会返回一个结构体, 这个结构体有对此文件操作的所有信息 调用fopen时,系统返回这个结构体的地址 FILE *p = fopen("a.txt") 打开一 ...

  7. Vue的v-html指令说明,含案例

    v-html指令总结: 1.作用:向指定节点中渲染包含html结构的内容 2.与插值语法的区别: (1)v-html 会替换掉节点中所有的内容,{{}}则不会 (2)v-html 可以识别html 结 ...

  8. geoserver官网

    https://www.osgeo.cn/geoserver-user-manual/index.html

  9. Qt开发环境的建立

    在建立开发环境之前,先来了解一下Qt是什么以及它的历史变迁.Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序, ...

  10. 使用layui时遇到的问题以及解决文章链接

    1.斜线表头效果 2.表格嵌套使用 3.layui数据表格跨行自动合并 4.layui表格数据变更的处理方式 5.layer弹窗动态添加KindEditor编辑器 6.layer弹出层自动调节位置 7 ...