一、继承为题的提出

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

  我们知道面向对象的三大特性是:封装、继承和多态,可以知道继承在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语句指定要进行访问的构造函数

  

  

最新文章

  1. DGbroker三种保护模式的切换
  2. window操作技巧
  3. HDU_2041——走楼梯,递推
  4. 面向面试编程——javascript对象的几种创建方式
  5. Qt 的一些浅知识点
  6. android分包方案
  7. layui table分页 page为false时,limit问题
  8. System.Diagnostics.Process 测试案例
  9. Linux磁盘故障案例
  10. 【模板】Treap
  11. 抽屉之Tornado实战(4)--发帖及上传图片
  12. OpAmp Voltage Follower/Regulator
  13. js模板引擎之artTemplate
  14. chrome扩展安装图文教程
  15. Vue学习笔记:methods、computed、watch的区别
  16. C#数组的Map、Filter、Reduce操作
  17. C. Ayoub and Lost Array Round #533 (Div. 2) 【DP】
  18. 批量插入Oracle,遇到CLob字段慢的解决办法
  19. 从零开始一个http服务器(一)-开始
  20. 【BZOJ4108】[Wf2015]Catering 有上下界费用流

热门文章

  1. Express + Mongoose 极简入门
  2. 揭开HTTPS的神秘面纱
  3. 桥接模式下,主机能ping通虚拟机,虚拟机ping不通主机
  4. Java JDBC 基础
  5. shell脚本之awk、sed、grep案例
  6. Let a mthod in RestControl return a json string
  7. Android6.0运行时权限的处理Demo
  8. android:layout_gravity 和 android:gravity 的区别?
  9. 第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
  10. CentOS定时备份MySQL数据库