java继承多态
‘壹’ 如何理解java继承与多态
继承:子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。
多态:多态的特征是表现出多种形态,具有多种实现方式。或者多态是具有表现多种形态的能力的特征。或者同一个实现接口,使用不同的实例而执行不同的操作。实现多态有两种方式:重写和重载
‘贰’ Java继承与多态问题
我对java的学习有一年了吧,由于学习的间断性,对java面向对象的细节方面还很欠缺,对继承、多态、接口还有待更加深刻的了解,今天通过一个小小的例题,让我对多态有了比较深刻的了解:
[c-sharp]view plain
publicclassBase{
inti=1;
publicvoidamethod(){
System.out.println("Base.amethod()");
}
publicBase(){
this.amethod();
}
}
publicclassDescendextendsBase{
inti=-1;
publicstaticvoidmain(String[]arg){
Baseb=newDescend();
System.out.println(b.i);
b.amethod();
}
publicvoidamethod(){
System.out.println("Descend.amethod()");
}
}
此程序输出结果是
Descend.amethod()
1
Descend.amethod()
Descend继承Base,程序一开始就利用了多态new 了一个Descend子类,然后又将此子类赋值给父类b,在生成子类时要调用父类的构造函数,又因为子类重写了父类的方法amethod()方法,所以在执行父类构造方法中的amethod()时,这个方法就属于子类的方法,至于输出1的问题,是程序在编译阶段就指定了‘i’就是父类中的‘i’,即在执行Base b=new Descend()时就指定了父类中的i。
‘叁’ 为什么要使用java的继承与多态使用java的继承与多态的好处是什么
java的继承和多态是java语言面向对象编程的一大特色。继承,实现了类的重用,这样子可以减少程序员的工作量,而且利用这一特点,可以规范语言的关联结构层次,使得代码更加整齐,层次更加分明。多态这一特点很好的解决了程序函数同名的问题,如:同一个加法函数方法,参数的个数不一样,利用多态便可以根据参数列表调用需要的方法。
‘肆’ java的多态怎么实现
实现多态的三个条件(前提条件,向上转型、向下转型)
1、继承的存在;(继承是多态的基础,没有继承就没有多态)
2、子类重写父类的方法。(多态下会调用子类重写后的方法)
3、父类引用变量指向子类对象。(涉及子类到父类的类型转换)
向上转型 Student person = new Student()
将一个父类的引用指向一个子类对象,成为向上转型,自动进行类型转换。此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法此时通过父类引用变量无法调用子类特有的方法。
向下转型 Student stu = (Student)person;
将一个指向子类对象的引用赋给一个子类的引用,成为向下转型,此时必须进行强制类型转换。向下转型必须转换为父类引用指向的真实子类类型,,否则将出现ClassCastException,不是任意的强制转换
向下转型时可以结合使用instanceof运算符进行强制类型转换,比如出现转换异常---ClassCastException
‘伍’ 关于java中继承和多态的关系
继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。
多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
在Java中也可以这么说:编译时看父类,运行时看子类。
‘陆’ java中什么是继承,什么是多态
继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。
多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
可以这么说:编译时看父类,运行时看子类。
‘柒’ java中继承和多态区别.
通过继承可以实现代码的复用。(子类可以拥有父类的一些属性和方法)
多态就是指父类的某个方法被子类重写时,可以各自产生自己的功能行为。
‘捌’ 如何理解java中继承与多态两个特性的概念
子类拥有父类的方法和属性就是继承!而多态就是在继承的时候,拥有父类的功能,同时又有自己的功能。
‘玖’ Java继承和多态问题
面向对象编程有三大特点: 1、继承 2、多态:方法的覆盖(方法的重写overriding)、方法的重载(overload) 3、封装一.继承 继承就是子类对父类的继承.包含父类的方法,还可以添加自己独有的方法。二.多态 方法名称允许相同,但根据传入参数的类型,个数不同形成多态的形式. 方法覆盖要满足5个条件:(方法覆盖:存在继承关系) 1、方法名称一致 2、参数一致 3、返回值一致 4、方法的权限不能比父类的小 5、不能比父类抛出更多的异常
‘拾’ java中多态和继承的区别
这种说法是错误的。
多态是指的 父类里已有的方法,不同的子类可以根据不同的需要重写该方法,以达到不同效果。
方法继承是指 父类里已有的方法,子类可直接用父类的方法,而不用再去定义。
比如 父类 Animal 有 eat(),子类Dog重定义 eat(),具体是吃骨头,子类Cat重定义eat(),具体是吃鱼,子类Cow重定义eat()具体是吃草。这是多态。
父类Animal有方法 watch(),表示看,子类 Dog、Cat、Cow 可直接使用方法watch(),这是继承。