java面向对象之继承

那一夜      2022-04-09     599

关键词:

  在java中,面向对象毫无疑问是java的重中之重,今天我们来看一看java面向对象的三大特性之一继承。

  首先我们来了解一下类的结构是怎样的?

  类中主要有成员属性,成员方法,静态属性,静态方法,构造方法(暂不考虑代码块)。成员属性和成员方法是属于对象的,静态属性和静态方法是属于类的,如下图所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 类的结构我们知道了(为后面做铺垫的),那么接下来就正式的进入了我们的主题,继承!

  1.什么是继承?

(1)用来提高代码的复用性

(2)将相同的功能模块封装到方法中需要使用时调用方法达到代码复用的目的

(3)通过继承将多个类中的相同的类容摘取出来,变成一个新类,让其他类和当前的新类产生关系,达到代码复用性的目的

  2.怎么样才能继承?

  使用关键字extends,如下所示,B继承A, A是B的父类,B是A的子类。当一个类不显示的继承其它类时,默认继承Object类,Object是所有的父类。在java中只有直接父类和间接父类关系,没有兄弟关系,爷孙关系。

 

使用继承以后就可以子类就是可以使用父类中的方法了,如下图所示,子类的对象可以直接调用父类中方法,而不用重新定义方法。然而其实很多时候因为子类的需求和父类的需求是不同的,所以需要重写父类的方法。这样的话,代码的复用率就低了。另外,java中是单继承的,不允许出现多继承,当一个类已经继承了这个类就不会继承其它类,代码的可扩展性就大大的降低了,其次,一旦类的继承链越来越长的,维护的成本就变的相当高了,当改动其中一个类时,很多类都需要进行改动,可能还不如重构来的快。大多时候我们都是面向接口编程的,这个话题我们有空可以再来聊一聊!

 

 3,父类的东西,子类可以全部继承吗?

  不,当然不是;

  3.1权限修饰符的继承问题

  被private修饰的,是不可以被继承的,因为private修饰的只能在本类中可见,子类是不可见的;另外父类被protected或public修饰的,子类是可以继承的;被默认修饰符修饰的只能在同包下的子类是可以继承的;

  3.2 构造器的继承问题

  构造器是不会被子类继承的,但子类的对象在初始化时会默认调用父类的无参构造器,当父类显示写了有参构造器,且没有无参构造器。子类继承父类的时候必须显示的调用父类的有参构造器。调用的方式可以使用super(a,b)来调用;

  3.3 static修饰符的继承问题

  子类是不会继承父类被static修饰的方法和变量,但是可以调用;如图所示,this.a()就会报错,普通方法的继承this.method_a()就不会报错;

 

   4,方法的重写(覆盖)

  重写是发生在方法层面上的,属性是不会重写的,可以被隐藏,隐藏是针对于静态方法和静态属性的。另外重写是针对于实例方法的,子类的实例方法不能覆盖父类的静态方法,子类的静态方法不能隐藏父类的实例方法;当子类需要扩充父类的功能时,需要会对父类的方法进行重写,那么重写必须满足哪些条件呢?,如下图所示,

  

   4.1,即要重写的方法的方法名和参数列表必须相同,可以在要重写的方法的上方添加@Override注解,来判断是否正确的进行了重写;

  4.2 即子类的返回值类型和抛出的异常类型必须要小于等于父类的类型

 

  4.3 要重写的方法的权限修饰符必须要大于等于父类方法的权限,不然就会报错,

 

注意:重写是对于实例方法而言的,隐藏是对于静态方法和属性而言的(主要是由父类和子类中相同的方法名和属性名引起的),重写是受RTTI(运行时检查)约束的,即运行期间才知道该方法属于哪个类的,隐藏是不受该约束的,即编译期间就可以知道该方法和属性属性属于哪个类的。

下面有一道网上的面试题,主要针对于重写和隐藏的,小伙伴可以做做看!!!

package com.shsxt.test;


public class Test07 {
public static void main(String[] args) {

Circle circle=new Circle();
System.out.println(circle.name);
circle.printType();
circle.printName();

Shape shape = new Circle();
System.out.println(shape.name);
shape.printType();
shape.printName();
}
}

class Shape {
public String name = "shape";


public void printType() {
System.out.println("this is shape");
}

public static void printName() {
System.out.println("shape");
}
}

class Circle extends Shape {
public String name = "circle";


public void printType() {
System.out.println("this is circle");
}

public static void printName() {
System.out.println("circle");
}
}

答案:

 

 

 

 

java面向对象之继承(代码片段)

继承(Java面向对象三大特征之一)目录继承(Java面向对象三大特征之一)1.1、使用继承1.1.1编写父类A1.1.2编写子类B,继承父类A注意1.2继承的特性1.3子类继承父类的什么?不能被继承的父类成员:1.4super和this关键字1.5继承条件下... 查看详情

java学习面向对象之继承

继承(面向对象特征之一)好处:1:提高了代码的复用性。2:让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。java中对于继承,java只支持单继承。java... 查看详情

java面向对象之继承

  在java中,面向对象毫无疑问是java的重中之重,今天我们来看一看java面向对象的三大特性之一继承。  首先我们来了解一下类的结构是怎样的?  类中主要有成员属性,成员方法,静态属性,静态方法,构造方法(暂不... 查看详情

java面向对象之继承.(代码片段)

1:继承的定义:  Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。2:关键字:extends:继承3:格式形式:publicclassAextendsB A:代... 查看详情

java面向对象编程之继承

前言Java语言有三大重要的特性,分别是继承、多态和封装。今天我们就来聊聊继承,继承是复用程序代码的有力手段,使用继承我们会少写许多代码,也可以让我们在写代码的时候逻辑变得更加清楚。继承的基本语法在Java语言... 查看详情

java面向对象之继承(代码片段)

Java三大特性之继承本篇内容1.继承的含义2.继承的运用3.顶级父类:Object4.小结1.继承的含义          继承是Java三大特性之一。何为继承?其实继承在我们现实生活中类似于父与子,在一个家庭中,有继承家... 查看详情

java面向对象基础之继承

Java面向对象基础之继承1.包==文件夹使用步骤:1.1自定义包----创建一个包src—new–package1.2包命名com.开头—com.模板名比如:com.test包的导入----不同包中的类互相调用语法:import<包名>.<类名>示例:imp... 查看详情

java面向对象基础之继承

Java面向对象基础之继承1.包==文件夹使用步骤:1.1自定义包----创建一个包src—new–package1.2包命名com.开头—com.模板名比如:com.test包的导入----不同包中的类互相调用语法:import<包名>.<类名>示例:imp... 查看详情

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

继承(面向对象特征之二)

好处:1:提高了代码的复用性。2:让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。java中对于继承,java只支持单继承。java虽然不直接支持多继承,但... 查看详情

java面向对象之继承!

 /**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/1、抽象&... 查看详情

java入门之面向对象-划重点

目录Java入门(七)之面向对象-划重点0.面向对象的概念0.1面向对象和面向过程0.2属性和方法1.面向对象的特征1.1对象唯一1.2抽象性1.3三大特性——继承、封装、多态2.继承相关2.1抽象类2.2接口3.多态相关3.1构造方法课后习题角色... 查看详情

java面向对象编程之继承

在上一篇博客中,我们已经了解继承的基本概念和语法,那么今天我们就来聊一聊有关于继承的其他东西。让我们来了解一下什么是方法重载(overload)和方法覆盖(override)方法重载(overload)对于类的的方法(包括从父类中继... 查看详情

java面向对象的三大特征之继承

目录初识继承继承中的几个注意点铁汁们,好久不见😁。我们前面聊了聊Java中封装那点事,那么今天就让我们看看Java中的继承到底是个什么东东😉初识继承😎我们先不说是继承的概念是什么?那概念太... 查看详情

面向对象之继承

1、继承的作用:  通过继承将多个类中的相同的内容摘取出来变成一个新的类让其他类和当前新的类产生关系达到代码复用性的目的,可以更好的维护类和类之间的关系2、如何继承  ClassAextendB    A是B的子类(派生类)... 查看详情

scala入门系列:面向对象之继承

extends与Java一样,也是使用extends关键字,使用继承可以有效复用代码classPerson{privatevarname="leo"defgetName=name}classStudentextendsPerson{privatevarscore="A"defgetScore=score}definedclassPersondefinedclassStudentscala>v 查看详情

重新认识java----面向对象之继承!

学习一个新知识的第一步,就是要知道它是什么,然后要知道为什么要用它,最后要知道如何使用它。这篇文章,我们重新认识一下java中的继承。继承是个什么东西我们先来看一下上一篇文章中的代码:你会... 查看详情

java基础之面向对象

 Java基础之面向对象一.什么是面向对象?面向对象就是指以属性/特征和行为的观点来分析现实世界中事物的方式。二.什么是面向对象编程?面向对象编程就是指先使用面向对象的观点进行分析后再使用面向对象的编程语言... 查看详情