Java基础知识总结之继承

一、继承的基本概念

什么是继承呢?

我们可以想一下,既然是“继承”,那么它必须是在两个或多个类之间所发生的关系吧,这样我们就可以说:这个类继承自什么类,假如只有一个类的话,它既无法继承别的类,而且也没有别的类来继承它,这就构不成什么继承关系了哈,理清楚了这一层关系之后我们再来谈谈它继承了什么呢? 既然说什么什么类继承自什么什么类,那它肯定要从继承的那个类中继承点什么呀!我们把发生继承关系的这两个类称为父类和子类,子类可以继承父类的属性和方法,这个就是继承的基本概念,下面我们来系统的学习一下吧 ~ ~

继承是面向对象的三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法

继承的格式:

public class 子类名 extends父类名{}

public class Zi extends Fu{}

父类也被称为基类、超类

子类也被称为派生类

二、继承的好处和弊端

继承的好处

提高了代码的复用性(多个类相同的成员可以放在同一个类中)

提高了代码的维护性(如果方法的代码需要改,修改父类中的方法即可)

继承的坏处

类与类之间产生了关系,提高了耦合性,父类变化子类也不得不变化,削弱了子类的独立性

什么时候使用继承

继承关系的体现(什么是什么的一种,大集合包含小集合,比如老虎可以继承动物类,因为老虎属于动物)

三、继承中变量访问的特点

在子类方法中访问一个变量

子类局部范围找

子类成员范围找

父类成员范围找

没有就会报错

四、super关键字

和this关键字用法相似

this:代表本类对象的引用

super:代表父类存储空间的标识(可以理解为父类对象的引用)

五、继承中构造方法的访问特点

子类中所有的构造方法默认都会访问父类中无参的构造方法。

因为子类会继承父类中的数据,可能还会使用父类的数据。所以子类初始化前,一定先完成父类数据的初始化(访问父类的构造方法就是为了使得父类数据初始化)

每一个子类构造方法的第一条语句默认都是:super()

如果父类中没有无参构造方法,只有带参构造方法

通过使用super关键字去显式的调用父类的带参构造方法

在父类中自己提供一个无参调用方法

六、继承中成员方法的访问特点

通过子类对象访问一个方法

先在子类范围找,然后在父类范围找,如果都没有就报错(不考虑父亲的父亲)

七、方法重写

方法重写概述:

子类中出现了和父类一模一样的方法声明

应用:当子类需要父类的功能,而功能主体子类有自己的特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

@Override
是一个注解(注解后面会学习到)

可以帮助我们检查重写方法的方法声明的正确性

方法重写的注意事项:

父类中的私有方法,子类不能继承,所以也不能重写

如果没有写访问权限,默认是default

子类访问父类时,权限不能比父类的高

Java中不能同时继承多个类,但是可以多层继承,一层套一层

访问权限

1、private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

2、default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。

3、protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。

权限 类内 同包 不同包子类 不同包非子类
private × × ×
default(不写) × ×
protected ×
public

八、包

包就是文件夹,不同的包下可以放同名的文件,对类进行分类管理

src com 下

包的定义格式

格式:packpage包名;(多级包分开用)
package com.it(二级包)

可以用cmd命令编译并且执行一个代码,从中理解包和文件夹的关系,以及不同包下为什么可以出现相同的命名

导包

使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦
为了简化带包操作,java提供了导包功能

import包名;

九、修饰符

权限修饰符
上表有

状态修饰符
final(最终态)
关键字是终的意思,可以修饰成员方法,成员变量,类

final关键字声明类可以把定义为不能继承的,即最终类;

也可以用于修饰**方法,**该方法不能被子类重写;

也可以用于修饰变量,表明该变量是常量,不能再次被赋值;

被声明为final类的方法自动的声明为final,但是实例变量并不是final

final修饰局部变量
当变量是基本类型:final修饰指的是基本类型的数据值不能发生改变

当变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址值的内容可以发生改变.

例如:final int age=20;属于数据值不能发生改变
final Student s=new Student();属于地址值,内容可以变,值不能变

十、static(静态)

可以修饰成员方法,成员变量

特点:

static修饰的特点:被类的所有对象共享

这也是我们判断是否适用静态变量关键字的条件

可以通过类名调用,也可以通过对象名调用(推荐适用类名调用)

直接写类名然后定义这个静态变量的值是多少

访问特点:
静态成员方法只能访问静态成员;
非静态成员方法可以访问所有;

到此这篇关于Java基础知识总结之继承的文章就介绍到这了,更多相关Java继承内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java必须学会的类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟方法,被继承的类被称为父类或者基类,继承的类称为子类或者导出类,在子类中可以调用父类的方法和变量.在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类.但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类.这就相当于一个人不能有多个父亲一样(滑稽,老王表示不服). 话不多

  • Java面向对象程序设计:继承,多态用法实例分析

    本文实例讲述了Java面向对象程序设计:继承,多态用法.分享给大家供大家参考,具体如下: 本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类(父类/超类/基类)即可.[比如,泰迪狗类也是狗类,狗的属性,泰迪狗也应该是有的,那么泰迪狗类在定义的时候就不必要添加那些与狗类重复的属性了,而是直接继承狗类即可.在多个狗类的子类(泰迪狗,二哈,柴犬)的时候,直

  • 关于Java继承中父类和子类构造函数的问题

    Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 可以参考这篇Java子类实例化总是默认调用父类的无参构造操作 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自己的无参和有参构造方法.不论实例化时调用的是子类的有参还是无参构造函数,默认调用的是父类的无参构造函数. 2.当父类有显式定义无参构造方法时, 此时子类也可以有自己的无参和有参构造方法.类似于1,同样默认隐式调用父类的无参构造方法. 3.

  • 解决java中的父类私有成员变量的继承问题

    如果父类中属性为私有(private),那么能否被子类继承呢? 答案是不可以. 我们看如下简单代码 class Father { private String name; public void sayHi() { System.out.println("My name is " + this.name); } } class Son extends Father {} public class PrivateFieldTest { public static void main(St

  • Java面向对象之继承性的实例代码详解

    一.类的继承 A类继承B类,是指A类可以拥有B类的非私有属性和方法,同时A类也可以自己定义属性方法或重写方法以扩充自己的功能. 1.1 方法的重写 重写方法时,方法的方法名.返回值类型和参数个数及类型均需一致. 首先定义父类Animal,包含年龄.名字两个属性及吃的方法. public class Animal { int age; String name; public void eat(){ System.out.println("动物可以吃东西"); } } 通过子类Dog继承父

  • Java父类继承中的static和final用法

    1.父类中staitic修饰的静态方法,不能覆盖.不能继承. 2.父类中staitic修饰的变量或常量,能覆盖.不能继承. static修饰的变量和方法,只属于类本身,不属于对象:当声明一个对象时,并不产生static变量和方法的拷贝.也就是说,用static修饰的变量和方法在类加载的时候,会分配一块存储空间,所有此类的对象都可以操控此块存储空间: 注意:当子类没有与父类同名的static变量(或方法时),子类的对象也可操控这块内存空间.但是,子类并没有继承父类中static修饰的变量和方法.这

  • C++中的多态与多重继承实现与Java的区别

    多态问题 笔者校招面试时被问到了著名问题「C++ 与 Java 如何实现多态」,然后不幸翻车.过于著名反而没有去准备,只知道跟虚函数表有关.面试之后比较了 C++ 和 Java 多态的实现的异同,一并记录在这里. C++ 多态的虚指针实现 首先讨论 C++. 多态也即子类对父类成员函数进行了重写 (Override) 后,将一个子类指针赋值给父类,再对这个父类指针调用成员函数,会调用子类重写版本的成员函数.简单的例子: class Parent1 { public: virtual void s

  • Java中的对象、类、抽象类、接口、继承之间的联系

    正文: 举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成. 在动物中又分为两类:哺乳动物.卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示. 而哺乳动物可以继续划分为人.狗.猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示. 如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式. 然后每个学生或者每个工人都是具体的,那么就通过对象来表示: 由下

  • Java中的封装、继承和多态,你真的都懂了吗

    封装 所谓的封装就是把类的属性和方法使用private修饰,不允许类的调用者直接访问,我们定义如下一个类,可以看到所有的成员变量和成员方法都使用private修饰了,我们现在来使用一下这个类. 当我们使用的时候编译器给出了下面这样的报错. 告诉我们说是private访问控制,那么这是什么意思呢?我们来看看另外一张图,那么这张图代表这什么呢?在看这张图之前,我们先来看看四者都提到的包,那么包又是什么呢,包可以简单理解为一个文件夹,把类放到放到包里面,也就相当于是专门的文件夹里面,这不是我们说的重点

  • 浅谈Java 继承接口同名函数问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); } interface C extends A,B{ } public class Test implements C{ @Override public void fun() { System.out.println("hehe"); } public static void main

随机推荐