一、继承为题的提出

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

  我们知道面向对象的三大特性是:封装、继承和多态,可以知道继承在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. sqli-labs(46)

    0X01首先我们先来看一下源码 发现查询语句变成了 order by  参数也变成了 sort 看看是什么样的 ()首先看看本关sql语句 $sql = "SELECT * FROM use ...

  2. 分布式-信息方式-JMS大纲

     一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息, ...

  3. 解决新建Maven项目webapp-- index.jsp报错

    现在,随着项目开发的不断增长,项目变得庞大,jar包管理起来也很费时.使用maven工程可以很轻松的帮助我们管理jar包,省时. 今天,我在公司电脑新建的maven工程,新建完后 index.jsp报 ...

  4. C++入门经典-例3.19-使用break跳出循环

    1:代码如下: // 3.19.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...

  5. LeetCode 17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出: ...

  6. 如何在DELL R420上部署EXSI虚拟化(服务器上的安装)

    <VMware ESXi>是一款虚拟化软件.软件支持windows平台客户端界面管理,客户端界面与正常使用的虚拟机WMware Workstation界面功能类似VMware ESXI 服 ...

  7. leetcode 102二叉树的层序遍历

    5月20更新: 使用借助队列实现bfs,定义len记录队列的尺寸直接进行遍历层序 /** * Definition for a binary tree node. * struct TreeNode ...

  8. webshell 常见 Bypass waf 技巧总结

    在渗透学习的过程中,总会遇到各种情况,例如 php 大马被 waf 拦截的时候,那么如何制作免杀 php webshell 呢,接下来就由我带各位小伙伴们一起踏上大马免杀之路,不喜勿喷. 一篇好的文章 ...

  9. np.unique()对一维和二维数组去重

    numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)[source] 一 ...

  10. Wireshark 学习笔记 Lebal:Research

    学习Wireshark主要是为了契合我最近做的线性激光雷达项目,主要用于抓取数据包 首先是三本书比较值得一看,第一本是清华大学出版社的,侧重教学,第二三两本是人民邮电出版社的,其中第二本是许多课程的指 ...