继承和多态的学习和总结

继承是为了减少代码冗余,将有 is-a 关系的事物抽象出来,作为父类,将众多共有的属性和方法在父类中实现,让其它类继承,这些类称为子类,这些子类就可以避免书写过多的重复代码;多态是为了实现针对不同的事件作出不同的回应,常用的是动态绑定,重载,覆盖

继承:

  • 构造方法:如果子类没有定义任何构造方法,则需要父类已经定义了 无参构造方法。值得注意的是,对于子类中的构造方法,在子类的构造方法语句执行前都会去调用父类的构造方法,默认情况下是调用父类的无参构造方法,哪怕是在子类的构造方法中,相当于使用了语句 super() ; 如果你想调用父类的有参构造方法,则需要 super(param a, param b) 语句;而有的类中的构造方法需要相互调用,则需要使用 this()
  • 区别 super() 和 this() 关键字,super()是调用父类的方法,this()是调用本类中的方法;
  • 如果父类中的方法或属性为 private ,很遗憾哪怕你子类拥有这些方法或属性,你也不能修改它们。考虑到子类可能具有这些需求,那么你可以用另外一种限定修饰符 protected;protected可以让这个相同包内的类具有访问权限,跨包就需要该类是其子类;而默认修饰符 (default) 在同一个包内都可以访问,但跨包后就不具备权限了。

多态:

  • 动态绑定:一个对象的构造声明可能出现用父类的对象引用来引用子类的对象,这个父类被称为声明类型,而子类被称为实际类型。java中的机制则是从实际类型开始查找能被响应的方法或属性,以继承的链往上延伸查询,找到则停止查询并执行该动作;
  • 关于重载:重载指的是函数名相同,参数名不同,如:feed(animal : Cat), feed(animal : Dog); 如果传递的参数为猫类则喂猫粮,如果传递的参数为狗类则喂骨头;这便是多态的一种实现;
  • 关于覆盖:不同于重载,这是指 签名完全相同 ,应用场景可能是:父类写好的函数被发现在子类中不适用或者已找到更好的方法,于是在子类中重写它;

 instance of 可用于观察一个对象是不是属于某个类;如果A类继承于B类,那 ( new A() ) instanceof B 的判断值是对的,但反过来就是 false ,因为你能说每只猫都是动物,但不能说每一只动物都是猫,这是检验 is-a关系的一种方法;由此衍生,就可以理解类型转换的问题,B b = new A(); 是没问题,因为A类事实上是B类的一种扩展,B类中有的属性和方法A类都有,所以可以放心的把将A交给B用;但是反过来又不好说了,尽管这个B型可能真的是A类型,只是用B类型引用传递过来,但java不怕一万就怕万一,于是就需要你自己确定这个责任,需要显示转换类型, A a = (A)(new B()); 这里你可以用instanceof来做一个确定,如果判断值为 true 则转换;

时间: 2024-11-03 21:00:33

继承和多态的学习和总结的相关文章

java继承和多态的学习

面向对象的三大特征:封装性.继承性.多态性. 继承是多态的前提,如果没有继承就没有多态 继承主要解决的问题就是:共性抽取 继承关系当中的特点:1.子类可以拥有父类的内容2.子类还可以拥有自己专有的内容. 父类也可以叫基类.超类.子类还可以拥有自己专有的内容. 在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式: 直接通过子类对象访问成员变量:等号左边是谁,就先用谁,没有则向上找. 间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则向上找. 注意事项:无论是成员方

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

No2_1.接口继承多态_Java学习笔记_接口

接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象的依存关系: 4.接口:Java中类可以实现多个接口,被用来建立类与类之间的标准: ***接口***1.接口的目的:Java语言只支持单继承,即一个类只能有一个父类.实际应用中,经常需要多继承解决问题,为解决该问题,提供接口实现类的多重继承:2.接口定义:与类的定义类似,接口的声明和接口体:[修饰符

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

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