继承

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. html元素全屏展示

    参数传入dom对象即可,注意不是jQuery对象,Vue下兼容 /** * 面板全屏展示 */ fullscreen: function () { if (this.isFullScreen) { / ...

  2. PyQt5弹框定时关闭(python)

    PyQt5使用QMessageBox,可以设置在几秒后关闭  (作者使用的python3) info_box = QMessageBox()# 因为没使用这种方式 QMessageBox.inform ...

  3. CANas分析软件,DBC文件解析,CAN报文分析,仿CANoe曲线显示

    2023.01.01:增加对Kvaser的支持参考了CANoe写了下面的软件,主要用途是对报文的回放及曲线的分析. 1.CAN连接,支持周立功CAN.CANFD及PCAN 2.DBC解析与生成文件 打 ...

  4. httpclint的传值和访问https

    一.StringContent与FormUrlEncodedContent 可参考这篇文章写的非常好: https://blog.csdn.net/lxrj2008/article/details/7 ...

  5. linux命令添加至环境变量

    vim /etc/profile 最后一行添加 /usr/local/nginx/sbin/  命令目录 export PATH="/usr/local/nginx/sbin/:$PATH& ...

  6. 时间函数strtotime的强大

    转载:php的strtotime举例-lsstarboy-ChinaUnix博客 1.上周日午夜 strtotime("last sunday"); 2.本周日午夜    strt ...

  7. 由浅入深学习SAP财务 - 高林旭 PDF 版本

    由浅入深学习SAP财务 - 高林旭  PDF 版本 有需要的联系 wx :erpworld

  8. TS 之 reduce

    一.函数介绍 Array.reduce()方法是对数组进行遍历,返回一个计算后的值 使用方法: Array.reduce((acc, cur, idx, src) => { }, initial ...

  9. h5项目

    h5项目,用vue3,用vite搭建就好,是一个新的项目. 接口还在开发,可以用mock模拟. 现有信息:接口url,ui-url,原型url(各部分的交互关系)

  10. K8s高可用集群部署(四)

    k8s官网高可用部署参考:https://kubernetes.io/docs/setup/independent/high-availability/                 目录 一 ,k ...