一、继承为题的提出

----------------------------------------------------

  我们知道面向对象的三大特性是:封装、继承和多态,可以知道继承在java应用中有多么的重要了。

下面我们先看一段代码:

  Person代码:

package com.it18zhang;

/**
* Created by stone on 2018/9/10.
*/
public class Person {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

  Student代码:

package com.it18zhang;

/**
* Created by stone on 2018/9/10.
*/
public class Student {
private String name ;
private int age ;
private String school; public String getSchool() {
return school;
} public void setSchool(String school) {
this.school = school;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

从上面的代码可以看出,代码中存在大量的重复,而按照之前学习的,重复是不可能进行消除的

二、继承的概念:继承是面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能够吸收已有类的属性和行为,并能狗扩展新的能力,在java类中,如果要实现继承,可以使用如下的语法。

  class 子类 extends 子类 {}

子类被称为派生类;父类称为超类;

观察继承的基本实现

class Person {
private String name;
private int age; public void setName(String name) {
this.name = name;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return this.name;
} public int getAge() {
return this.age;
}
} class Student extends Person { // Student类继承了Person类
} public class TestDemo {
public static void main(String args[]) {
Student stu = new Student(); // 实例化的是子类
stu.setName("张三"); // Person类定义
stu.setAge(); // Person类定义
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
}

可以发现:子类并没有定义任何的操作,而主类中用的全部的操作都是由Person类进行定义的,这说明:子类即使不扩充父类,也能维持对父类的操作

1.多个类中存在相同的属性和行为的时候,将这些内容抽取到单独的一个类中,那么多个类无需再定义这些类和行为,只需要继承那个类就可以了;多个类可以成为子类,单独的这个类可以成为父类或者超类;子类可以访问父类中的非私有属性和行为;通过extends关键字让类与类之间产生继承关系。

  2.继承的出现提高了代码的复用性,继承的出现让类与类之间产生了关系,提供了多态的前提。

  3.继承的特点:java只支持单继承,不支持多继承

      一个类只能继承一个父类,不可以有多个父类

      class SubDemo extends Demo{}  //ok

      class SubDemo extends Demo1,Demo2......//error

    java支持多层继承

      class A{}

      class B extends A{}

      class C extends B{}

  4.定义继承需要注意:

    不要为了获取其他类的某个功能而去继承

    类与类之间要有所属关系,xx1是xx2的一种关系

  4.1super关键字

   super和this的用法很像 ;this是本类对象的引用;super代表父类内存空间的标志;当字符类出现同名的成员的时候,可以用super进行区分。当子类调用父类构造函数的时候,可以使用super方法进行调用

  4.2函数的覆盖:子类找那个出现父类中一模一样的方法时候,会出现覆盖操作,也称为重写或者复写

  4.3父类中的私有方法不可以被覆盖;在子类覆盖的方法中,继续使用被覆盖的方法可以通过super.函数名进行获取

覆盖方法注意事项:覆盖的时候,子类方法权限一定要大于父类方法的权限;静态方法只能覆盖静态方法

  4.5子类的实例化过程:子类中所有的构造函数默认都会访问父类的孔灿构造函数;因为每一个构造函数的第一行都有默认语句super();

  4.6子类会具备父类的数据,所以先要确定父类是如何对这些数据进行初始化的。当父类中没有空参构造函数的时候,子类的构造函数必须通过this或者super语句指定要进行访问的构造函数

  

  

java复习(3)继承的更多相关文章

  1. Java复习总结——继承

    访问权限 Java中有三个访问权限修饰符:private.protected以及public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段以及方法)加上访问修饰符. 类可见表示其他类 ...

  2. java复习(3)继承下

    一.抽象类 ------------------------------------- 1.抽象定义概述:抽象类时从多个事物中奖共性的,本质的内容抽取出来 例如:狼和狗共性都是犬科,犬科就是抽象出来的 ...

  3. java 复习001

    java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...

  4. java复习(1)---java与C++区别

    [系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...

  5. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  6. Java复习5.面向对象

    Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...

  7. java 复习总结

    java 复习总结 命名方法 创建文件的名称应该和类的名称一致,不然会报错. 类采用首字母大写的方式来命名,如果是多个单词的类名,则每个单词首字母都大写,例如:HelloWorld . 方法采用驼峰命 ...

  8. JAVA接口的继承与集合

    复习 20190701 接口补充 一. java是单继承多实现 单继承: 一个类只能有一个父类 public class D extends D1 { } 2. 多实现 一个类可以同时实现多个接口 当 ...

  9. java复习面向对象(二)

    java复习面向对象(二) 1.static关键字 举例图片 静态变量 使用static修饰的成员变量是静态变量 如果一个成员变量使用了关键字static,那么这个变量不属于对象自己,而属于所在的类多 ...

随机推荐

  1. kali修改更新源及更新

    进入源文件进行修改 leafpad /etc/apt/sources.list (其实系统本身就自带了更新源,去掉其注释也是可以的,现在官方源的下载速度也还ok,下面的三选一亦可) #kali官方源 ...

  2. line-height与vertical-align:简单的属性不简单

    学习过CSS肯定对line-height与vertical-align两个属性有印象:line-height用来设置行高,vertical-align用来设置文本垂直方向的对齐方式,两种看似十分简单, ...

  3. 翻译 | 上手 Webpack ? 这篇就够了!

    译者:小 boy (沪江前端开发工程师) 本文原创,转载请注明作者及出处. 原文地址:https://www.smashingmagazine.com/2017/02/a-detailed-intro ...

  4. windows 简单实用Elasticsearch

    官网下载地址:https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/e ...

  5. 第八周学习总结&实验报告六

    实验总结 :类的继承 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 : 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异 ...

  6. C++构造函数调用虚函数的后果

    #include <iostream> class cx { public: virtual void func() { std::cout << "func&quo ...

  7. 怎样用 Bash 编程:逻辑操作符和 shell 扩展

    学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...

  8. notepad++ 正则表达式(记录)

    删除操作notepad++去掉行尾空格或逗号查找目标:\s+$ (或,+$)替换为空Note: 以换行符结尾表示是$\r\n,而不是\r\n$ notepad++删除文本文件里面的空白行查找目标:^[ ...

  9. docker(常见调试技巧):docker打包镜像调试技巧

    写Dockerfile可以先不指定CMD.ENTRYPOINT等启动命令,只要拷贝就好了 如下: # Dockerfile for basic-app-client # Build with: # d ...

  10. 卸载openssl后yum无法使用,ssh无法连接的解决办法

    一,安装nginx时,提示openssl版本问题,用yum update openssl 发现还是不行,于是rpm -e 卸载了openssl 此时,才发现yum不能用了,然后想上传个tar包时又出现 ...