面向对象三大特征之继承(extends)——Java笔记(六)

继承:

从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系

泛化:

把子类里的共性抽取到父类里的来的过程

特化:

子类在父类的基础上上定义了自己特有的行为特征的过程

格式:

修饰符 class SubClass extends SuperClass{

}

SubClass :导出类、继承类、子类

SuperClass:父类、基类、超类、源类

子类SubClass通过extends来继承父类SuperClass

继承是通过extends来实现的

继承提高了代码的复用性,提高了软件的开发效率

让类与类之间产生关系,这个是实现多态的前提

子类对象访问实例成员的时候,是现在子类里找,要是找不到再去父类找

每个类有且只有一个直接父类

一个类没有显示的继承其他的一个类时候,默认的直接父类就是object类

一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类object就会被取消

Java只支持单继承不支持多继承

父类里面私有的东西,子类不能继承

在继承操作中,对于子类的对象实例化,子类对象在实例化之前必须首先调用父类中的构造方法之后在调用自身的构造方法子

证明:

 1 class Super{
 2  public Super(){
 3   System.out.println("我是父类super");
 4  }
 5 }
 6 class Sub extends Super{
 7  public Sub(){
 8   System.out.println("我是子类sub");
 9  }
10 }
11 public class InstanceDemo {
12  public static void main(String[] args) {
13   new Sub();
14   /**
15    * 我是父类super
16    * 我是子类sub
17    *
18    * 先打印的是父类里面的在打印的子类里面
19    * 从这个可以看出是先调用父类的构造方法创建父类对象再来调用子类里面的构造方法
20    *
21    */
22  }
23 }

子类对象在初始化之前会默认调用父类无参的构造方法,但是一旦子类显示的调用了父类其他的构造方法,那么默认调用的构造方法将会被取消

方法的重写(Override):

当父类的某个方法不适合于子类本身的特征行为时就当重写父类中应当改变的方法

方法重写应遵循的原则:

方法签名(方法名+参数列表)必须相同

子类方法的返回值类型比父类方法的返回值类型更小或相等

子类方法声明抛出的异常应比父类方法申明跑出异常更小或相等,即子类方法不能抛出新的异常类型,子类方法可以同时声明抛出多个父类方法声明抛出异常的子类(RuntimeException例外)

子类方法的访问权限应比父类方法更大或相等

overload 与 override


 

区别点
重载(overload)
重写(override)

1           

判断规则     

参数列表顺序不同、类型不同、个数不同都可以构成重载

同类中方法名相同,但是方法的参数列表不同,与方法的返回值类型和修饰符无关

方法签名(方法名+参数列表)必须相同

子类方法的返回值类型比父类方法的返回值类型更小或相等

子类方法声明抛出的异常应比父类方法申明跑出异常更小或相等

子类方法的访问权限应比父类方法更大或相等


2
权限
无权限要求

被重写的方法不能拥有比父类更严格的权限

3

范围

发生在一个类中

发生在继承关系中
4
多态

编译时多态

运行时多态

构造方法不能被重写

super关键字

表示父类对象的默认引用

如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法

使用super调用父类方法

使用super调用父类的构造方法

对super的调用必须是构造器中的第一个语句

this不能出现在static修饰的方法中,super也一样不能出现在static修饰的方法中

因为static修饰的方法属于类,即调用者是类

this与super


 

区    别


this

super

1          

使   用

调用本类中的字段或方法

从子类调用调用父类的字段或方法

2

构   造

可以调用本类中的构造方法,且有一个构造方法要作为出口

从子类调用父类的构造方法,不管子类如何安排最终一定会去调用,默认调用的父类中无参的构造方法

3

要   求

调用自身构造方法时放在构造方法首行

调用父类构造方法时放在子类构造方法首行

4

特   殊

表示当前对象

表示父类对象

ps:使用super()和this()在同一个构造方法中是不可能同时显示出现的

时间: 09-10

面向对象三大特征之继承(extends)——Java笔记(六)的相关文章

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

【原生js】js面向对象三大特征之继承笔记

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 7 </head> 8 <script> 9 //中学生 10 function MidStu(name,age){ 11 this.name=name; 12 this.ag

面向对象三大特征之 继承

继承的作用:扩展已有的类的功能,实现代码的复用 语法: class 子类 extends 父类(){ 类体 } class person{ private string name; private int age; } public String setName(){ name=n; } public int setAge(){ age=a; } public void setAge(int a){ if(a>=0 && a<=100){ age=a; } } public S

面向对象三大特征之继承

一.继承 使用要点: 1.父类也称作超类.基类.派生类等. 2.Java中只有单继承,没有像C++那样的多继承.多继承会引起混乱,使得继承链过于复杂,系统难于维护.(类只有单继承,接口有多继承) 3.Java中类没有多继承,接口有多继承. 4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法). 5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object. package cn.s; public

PHP面向对象三大特征

<?php//PHP 面向对象三大特征 封装 继承 多态 <抽象> //封装 /** * @author bin * *//* class Person{ //encapsulate private $name; private $age; //这个就好比我们Java中的get set 想spring注入的 通过通过set方法 通过构造函数 一样 public function __set($columnName,$value){ $this->columnName = $valu

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

c++面向对象三大特征封装、继承和多态知识总结

面向对象三大特征:封装,继承,多态: 一.封装:该公开的就公开话,该私有的就隐藏掉,主要是由public,private实现:作用是便于分工和分模块,防止不必要的扩展: 二.继承:就是一种传承,可以把父类型中的数据传承到子类中,子类除了传承了父类的数据之外,还可以对父类型进行扩展: 公开继承  public 保护继承  protected 私有继承  private 保护成员:在子类和本类中可以访问,其他不行: 1.公开继承:在公开继承下,父类型中的数据是公开的到子类型中权限是公开的:父类型中保

(一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承

一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法.相当于将“细节封装起来”,只 对外暴露“相关调用方法”. 通过前面学习的“私有属性.私有方法”的方式,实现“封装”.Python 追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现. 继承 继承可以让子类具有父类的特性,提高了代码的重用性. 从设计上是一种增量进化,原有父类设计不变的情况下,可以

JavaSE(一)面向对象三大特征、五大原则

面向对象三大特征: (1)封装(Encapsulation) 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性.简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分. (2)继承(Inhe