A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李坏 中级黑马   /  2014-4-24 23:28  /  1357 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李坏 于 2014-5-17 19:27 编辑

继承多态什么关系求高手解答?

6 个回复

倒序浏览
继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。
优点:a因为大部分是继承而来的,实现代码重用,减少代码书写量;
b很容易修改和扩展已有的实现
缺点:a打破了封装,因为基类向子类暴露了实现细节
b白盒重用,因为基类的内部细节通常对子类是可见的
c当父类的实现改变时可能要相应的对子类做出改变
d不能在运行时改变由父类继承来的实现
多态:
作用:简单的说就是一个接口,多种实现;继承的表现就是多态(没有继承就没有多态。)
a应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
b派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
优点:a可替换性(可以替换一存在的代码);
b可扩充性(增加新的子类不影响原有类的特性);
c接口性;
d灵活性;
e简化性
缺点:a“遮盖”私有方法。只有非private的方法才能够被笼罩,尽管编译器不会报错,然而也不会遵照我们所渴望的来实行。在导出类中,对于基类中的private方法,优秀采纳不同的名字。
b域在转型时候的问题。对于成员变量(域),导出类将占有从基类承袭而来的成员变量和自己的成员变量(变量名字相一同也是如此),况且,将分摊不同的存储空间,这么,导出类将具有两个名目一样的域。为了取得基类的域,务须实际地著名super.field能力走访,而默许的域则是导出类自己的域。
c静态计策是与类相关系的,而非与某个对象相干联的,那么它就不拥有多态行动。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
没关系,都是JAVA的特性罢了。
回复 使用道具 举报
继承是JAVA将部分类的共有属性抽取出来封装成一个类,让其他类来继承这个类,拥有这个共有哦属性;
多态是在有继承或者接口实现的基础上,对非静态方法进行动态绑定。
所谓动态绑定就是非静态方法在编译的时候,检查左边的对象是否包含这个方法,在运行的时候,看右边对象是否包含这个方法,通过对父类对象的引用,实现子类相同属性的不同表现

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
         继承多态  一般同时用的, 多态可以父类创建子类东西。
回复 使用道具 举报
继承是一个类具备另一类的所有非私有功能时,为了简化代码提高复用性的一种技术.
多态是一个事物具有多种状态.如子类属于父类,那么子类的对象类型可一定义为父类的对象类型,但这是这个对象的引用只能操作父类中已经声明的功能方法.也可以将这个对象进行强制类型转换为子类类型,这是这个对象又可以操作子类的特有功能了.
代码举例:
public abstract class Demo1 {
  abstract void study();
}

//Demo2具备Demo1中的所有功能方法,这就是说Demo2是属于Demo1
//Demo2虽然是属于Demo1的,但Demo2可以有自己的特有方法sleep(),这是它自己的特性
public class Demo2 extends Demo1{
  void study(){
   System.out.print("学习");
  }
  
  void sleep(){
   System.out.print("睡觉");
  }
}

//多态的表现形式举例
public static void main(String[] args){
  //de1是Demo2类的对象引用,但是这个引用的类型是Demo1
  Demo1 de1 = new Demo2();
  de1.study();
  
  //de2是将Demo1类型的de1转换成了Demo2类型的de2,类型进行了转换,但引用没有变
  Demo2 de2 = (Demo2)de1;
  de2.sleep();
}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
首先说明一下:多态、继承、封装,是面向对象的三大特性。继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。 多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。 可以这么说:编译时看父类,运行时看子类。多态是在继承的子类中有方法重写的情况下使用,如果没有重写,那么使用多套就没有意义。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马