一、简介

描述:

  • 现实世界中的继承无处不在。比如:动物细分有哺乳动物、爬行动物等,哺乳动物细分有灵长目、鲸目等。
  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
  • 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。
  • 子类和父类之间,从意义上讲应该具有'子类 is a 父类'的关系。
  • 继承使用'extends'关键字,意思为'扩展',子类是父类的扩展。

作用:

  • 继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象。
  • 提高代码的复用性。

注意:

  • 父类中的属性方法可以被子类继承
  • 子类中继承了父类中的属性和方法后,在子类中能不能直接使用这些属性和方法,是和这些属性和方法原有的权限修饰符(public/protected/default/private)相关的。
  • 父类中的构造器是不能被子类继承的,但是子类的构造器中,会隐式地调用父类中的无参构造器(默认使用'super'关键字)。
  • Java中类只有单继承,没有多继承! 接口可以'多继承'!
  • 一个子类只能直接继承一个父类,一个父类可以被多个子类继承。

示例:

public class Son extends Father{ }

二、Object类

描述:

  • Java中的每一个类都是直接或间接地继承了Object类。所以每一个类都和Object类有’is a‘的关系。

注意:

  • 若一个类定义时没有显式地声明继承,那么在编译成class文件后,默认会加上继承Object类
  • 在Object类中,提供了一些方法被子类继承,那么就意味着,Java中任何一个对象都可以调用这些方法。例如:toString方法、equals方法、getClass方法等。

三、'Super'关键字


Ⅰ、简介

描述:

  • 在子类中可以使用'this'关键字来表示访问或调用子类中的属性或方法。
  • 子类继承父类之后,使用'super'关键字就表示访问或调用父类中的属性和方法
  • 'super'关键字代表对父类对象的引用。

注意:

  • 用'super'调用父类构造方法,必须是构造方法中的第一个语句
  • 'super'和'this'不能够同时调用构造方法,因为'this'也是在构造方法的第一个语句。
  • 'super'只能出现在子类的方法或者构造方法中。

Ⅱ、使用

  1. 访问父类中的属性

    public class Test {
    public static void main(String[] args) {
    new Student().say("王五");
    }
    } class Person {
    protected String name = "张三";
    } class Student extends Person {
    private String name = "李四"; public void say(String name) {
    System.out.println(name);//王五
    System.out.println(this.name);//李四
    /* 访问父类中的属性 */
    System.out.println(super.name);//张三
    }
    }
  2. 调用父类中的方法

    public class Test {
    public static void main(String[] args) {
    new Student().test();
    }
    } class Person {
    public void print() {
    System.out.println("Person");
    }
    } class Student extends Person {
    public void print() {
    System.out.println("Student");
    } public void test() {
    print();//Student
    this.print();//Student
    /* 调用父类中的方法 */
    super.print();//Person
    }
    }
  3. 调用父类中的构造器

    public class Test {
    public static void main(String[] args) {
    System.out.println(new Student().name);//张三
    }
    } class Person {
    protected String name; public Person(String name) {
    this.name = name;
    }
    } class Student extends Person {
    public Student() {
    /*
    显式地调用父类的有参构造器。
    若没有显式调用,默认会调用父类的无参构造器。
    注意:
    不管是显式还是隐式地调用父类的构造器,super语句一定要出现在子类构造器中第一行代码。
    所以this和super不可能同时使用它们调用构造器,因为它们都要出现在第一行代码的位置。
    */
    super("张三");
    }
    }

Ⅲ、'super'和'this'的区别

  1. 代表的事物

    • this:代表所属方法的调用者对象。
    • super:代表父类对象的引用空间。
  2. 使用前提
    • this:在非继承的条件下也可以使用。
    • super:只能在继承的条件下才能使用。
  3. 调用构造方法
    • this:调用本类的构造方法。
    • super:调用的父类的构造方法 。

四、方法的重写


Ⅰ、简介

描述:

  • 子类继承父类,继承了父类中的方法,但是父类中的方法并不一定能满足子类中的功能需要,所以子类中需要把方法进行重写
  • 方法重写只存在于子类和父类(包括直接父类和间接父类)之间。
  • 在同一个类中方法只能被重载,不能被重写。

注意:

  • 方法重写的时候,必须存在继承关系。
  • 父类的静态方法不能被子类重写为非静态方法 。
  • 父类的非静态方法不能被子类重写为静态方法。
  • 子类可以定义与父类的静态方法同名的静态方法,但这不是重写,因为静态(static)方法是属于类的,而不是属于实例的。
  • 被'final'修饰的父类方法无法被子类重写。
  • 父类的私有(private)方法不能被子类重写,子类继承父类后,是不能直接访问父类中的私有方法的,那么就更谈不上重写了。
  • 'protected'修饰的父类方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,所以没有多态性

Ⅱ、语法

规则:

  1. 重写时,子类中方法的方法名和参数列表,必须与要重写的父类的方法相同
  2. 重写时,子类方法的权限修饰符可以在父类方法的基础上扩大,但是不能缩小
  3. 重写时,子类方法的抛出异常类型的范围可以可以在父类方法的基础上缩小,但是不能扩大
  4. 重写时,返回类型可以相同,也可以不同。如果不同的话,子类的方法返回类型必须是父类方法返回类型的子类型
  5. 一般情况下,重写的方法会和父类中的方法的声明完全保持一致,只有方法的实现不同。

示例:

public class Test {
public static void main(String[] args) {
Student student = new Student();
student.run();
System.out.println(student.test());
}
} class Person {
public void run() {
System.out.println("personRun");
} protected Object test() throws Exception {
return "personTest";
}
} class Student extends Person {
/* 常见的方法重写示例 */
public void run() {
System.out.println("studentRun");
} /* 特殊的方法重写示例 */
public String test() throws RuntimeException {
return "studentTest";
}
}

Java基本概念:继承的更多相关文章

  1. JAVA封装、继承

    封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...

  2. java类的继承

    继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是 ...

  3. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  4. Java多线程概念简介 多线程中篇(一)

    Java的线程与操作系统的线程   在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...

  5. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  6. java基础之继承(一)

    虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...

  7. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  8. java 中的继承

    继承的概念 继承就是子类继承父类的特征和行为,使得子类具有父类得属性和方法. 继承得关键字:extends 语法格式:<modifier> class <name> [exte ...

  9. Java面向对象之继承extends 入门实例

    一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...

  10. Java中类的继承深入剖析

    在Java开发中,我们常常用到继承这一概念,可以说继承是Java这类面向对象编程语言的基石.正是有了继承这个概念,使得我们可以创建分等级层次的类.今天小编就和大家一起来深入聊聊Java语言的继承. 在 ...

随机推荐

  1. ACM-ICPC 2017 Asia Xi'an

    ACM-ICPC 2017 Asia Xi'an Solved A B C D E F G H I J K 7/11 O O Ø O O ? O O O for passing during the ...

  2. BZOJ1951 古代猪文 【数论全家桶】

    BZOJ1951 古代猪文 题目链接: 题意: 计算\(g^{\sum_{k|n}(^n_k)}\%999911659\) \(n\le 10^9, g\le 10^9\) 题解: 首先,根据扩展欧拉 ...

  3. Codeforces Round #647 (Div. 2) D. Johnny and Contribution(BFS)

    题目链接:https://codeforces.com/contest/1362/problem/D 题意 有一个 $n$ 点 $m$ 边的图,每个结点有一个从 $1 \sim n$ 的指定数字,每个 ...

  4. codeforces644B. Processing Queries (模拟)

    In this problem you have to simulate the workflow of one-thread server. There are n queries to proce ...

  5. poj2926Requirements (曼哈顿距离)

    Description An undergraduate student, realizing that he needs to do research to improve his chances ...

  6. hdu5375 Gray code

    Problem Description The reflected binary code, also known as Gray code after Frank Gray, is a binary ...

  7. 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量

    洛谷P2241-统计方形 题目描述: 有一个 \(n \times m\) 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 思路: 所有方形的个数=正方形的个数+长方形的个数.对于任意一 ...

  8. IFIX 5.9 报警存sql

    环境 win7x64 + ifix 5.9 + sql server 2008 (sql 我装在了别的win10的机器上,和ifix的win7不在同一个机器,网是通的) 1 安装sql server ...

  9. HDU 4335 What is N?(指数循环节)题解

    题意: 询问有多少数\(n\)满足\(n^{n!}\equiv b\mod p \land\ n\in[1,M]\),数据范围:\(M\leq2^{64}-1,p\leq1e5\) 思路: 这题显然要 ...

  10. 计蒜客第五场 UCloud 的安全秘钥(中等) (尺取游标法

    每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...