学习-继承与多态

  一 继承

  类与类的is a关系,叫做继承

  关键字:extends-继承

  语法: public class 子类名 extends 父类名 {

  效果:父类所以属性行为子类自动具有;java中只有单继承,一个子类只能继承一个父类

  重写:子类把来自于父类的方法覆盖,要求:

                    a.返回类型,方法名,形参列表必须与被重写方法完全一致

                    b.访问修饰符不能比被重写方法小

                    c.不能比被重写方法抛出更多异常

  内存中效果:内存叠加

  父类构造方法不会被继承,但是会参与子类对象创建(如图),在子类new对象时,会先开辟空间创建父类对象,再在次基础上叠加子类部分,形成一个完整的子类对象.

  

  所有的类,包括数组都有一个共同的父类-Object(根类),所以Object中所有属性方法都会出现在所有类身上,比如:

  1.getClass();

  2.hashCode();每个对象在内存里都有一个唯一的哈西值

  3.equals();判断两个对象是否业务相等

  4.clone();克隆

  5.toString();返回一个对象的字符串描述

  6.finalLize();这个方法是由Gc调用,用于销毁对象

  7.wait();等待

  8.notify();唤醒

  二 多态

  多态主要指的是方法的多态,一种行为多种实现.

  1.静态多态

  在编译期就能够确定运行期的效果,包括重载和单个的重写

  重载:在同一个类中,允许拥有多个同名方法,但是形参列表在类型,数量,顺序上至少有一处不同.(主要用于相似行为)

  2.动态多态

  在编译期不确定,要等到运气起来以后根据绑定对象不同,有不同的效果.由动态绑定配合重写实现.

  引用类型转型:

        a.向上转换-父类引用指向子类对象(自动转换).

        子类对象里面包括完整的父类对象,所以父类引用指向子类对象不会出现错误,一定成功.但是,父类类型的引用只能访问来自父类的属性,方法.

        b.向下转换-将父类对象交给子类引用(强转).

        在编码时,不会有父类对象交给子类引用存在,因为子类引用所指向的对象是父类对象,是不完整的,运行时会出错.向下转型作用在于,父类引用指向子类对象,但有时候需要访问或者调用子类特有的属性或者方法,这时候就要对父类引用做强转,使子类引用指向子类对象.但是如果不是指向的本类对象的话,还是会运行时出错.这时候就有使用关键字instanceof(boolean型运算符,专门判断引用是否指向某类对象).

  语法: 引用 instanceof 类型,true表示该引用指向该类型的对象,false则表示没有指向该类型对象.

  所以,向下转型实质上是使本类引用指向本类对象.

  三 抽象类与接口

  抽象类是专门用于继承,不能产生对象,只能用于继承;接口是与类有一些相似之处的另一种引用数据类型,用于使没有继承关系的类共享行为.

  命名规范 属性 行为 构造方法 设计原则 继承 实现
抽象类 名词,首字母大写;在类名前修饰abstract-抽象 与普通类一样
抽象方法使用可选修饰符abstract修饰

语法:访问修饰符 abstract 返回类型 方法名(形参列表);

普通方法与普通类没区别

与普通类一样 与生俱来的写入抽象类;抽象类因抽象方法而产生,没有抽象方法的抽象类是没有意义的 单继承,子类必须重写父类的抽象方法,否则子类也是抽象类 没有
接口 通常是xxxable(什么什么的行为);在接口名前修饰 interface-接口 默认为(只能是)公共的静态常量 默认(只能是)公共的抽象方法 没有构造方法 最小接口原则,尽量定义小接口 接口与接口直接存在继承关系,而且是多继承
类可以实现接口,多实现,使用关键字implements,实现类必须重写接口的抽象方法

语法:public class 类名 implements 接口名1,接口名2,接口名3.......{

  

  抽象类是继承的表现;接口更是典型的多态.

  

时间: 2024-08-29 05:25:25

学习-继承与多态的相关文章

OC学习篇之---类的三大特性(封装,继承,多态)

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java

学习java随笔第八篇:封装、继承、多态

java和c#一样都是面向对象的语言. 面向对象的语言有三大特征:封装.继承.多态 封装 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. class Person2 { private String name; public void setName(String name) { this.name=name; } public String getName() { return name; } private String sex; public voi

PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)

PHP面向对象三大特点学习 学习目标:充分理解抽象.封装.继承.多态 面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象:我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性 封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作. php提供了三种访问控制修饰符 public 表示全局,本类内部,类外部,子类都可以访问 pro

java学习中,面向对象的三大特性:封装、继承、多态 以及 super关键字和方法的重写(java 学习中的小记录)

java学习中,面向对象的三大特性:封装.继承.多态 以及 super关键字和方法的重写(java 学习中的小记录) 作者:王可利(Star·星星) 封装     权限修饰符:public 公共的,private 私有的     封装的步骤:          1.使用private 修饰需要封装的成员变量.          2.提供一个公开的方法设置或者访问私有的属性              设置 通过set方法,命名格式:     set属性名();  属性的首字母要大写 访问 通过ge

(转载)OC学习篇之---类的三大特性:封装,继承,多态

之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符:public,default,protected,private,访问权限一次递减的,这样我们在定义类的时

关于java继承、多态、抽象类、接口等性质的学习(1)

最近几日把JAVA编程思想翻了翻,顿时发现以前看的所谓XXX从入门到精通系列讲的简直不能看,只能是当做入门中的入门书吧. 为了日后不会忘记,把一些想法写下来. 关于继承和多态 我想继承是面向对象语言不可少的一部分吧,引用JAVA编程思想的一句话:“当创建一个类时,总是在继承”.继承通过extends关键字实现,继承实现后,基类中所有的域和方法都可以得到. class First{ private String s = "extend"; First(){ } public void t

非专业码农 JAVA学习笔记 4 java继承和多态

继承和多态 (一)继承的基本概念 子类 extends 父类(超类)(通过继承使用父类公用的变量,方法和属性等非private定义的) (二)类的继承 1.派生子类-获取父类非private定义的方法属性和相关的变量 2.域的隐藏和继承 (1)域的继承-继承所有非私有化的域 (2)域的隐藏-定义跟父类相同的变量,父类的变量就会在子类隐藏,但,子类执行自己的方法还是用的是子类的变量,执行继承父类的方法才自动用上隐藏的域 3.方法的继承和覆盖 (1)方法的继承-继承父类非私有的方法 (2)方法的覆盖

C++ Primer学习笔记(13)——封装、继承、多态

C++ 是一种典型的面向对象的编程语言,其最显著地特点是封装.继承和多态.充分理解封装.继承.多态是如何实现的,学好C++就不是难事了. 1.封装 封装是将多个细节元素组合在一起,隐藏起来,成为一个类.外部无法了解类内部是如何实现的,只需要考虑它的接口. 例如:将公司员工的姓名.年龄.工号等信息放在类的私有部分. 封装的好处: 避免类内部出现无意的.可能破坏对象状态的用户级错误. 随时间推移可以根据需求改变或缺陷报告来完善类实现,而无需改变用户级代码. 2.继承 该部分转自ruyue_ruyue

Python学习(七)面向对象 ——继承和多态

Python 类继承和多态 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 我们先来定义一个class,名为Person,表示人,定义属性变量 name 及 sex (姓名和性别):定义一个方法:当sex是male时,print he:当sex 是female时,pr