美文网首页
理解--->三大特性之继承

理解--->三大特性之继承

作者: 坚持编程_lyz | 来源:发表于2017-03-09 10:01 被阅读13次

内容来之 极客学院 和 毛毛虫的小哈

将子类转换成父类,在继承关系上面是向上移动的,所以一般称之为向上转型。由于向上转型是从一个叫专用类型向较通用类型转换,所以它总是安全的,唯一发生变化的可能就是属性和方法的丢失。这就是为什么编译器在“未曾明确表示转型”活“未曾指定特殊标记”的情况下,仍然允许向上转型的原因。

谨慎继承
上面讲了继承所带来的诸多好处,那我们是不是就可以大肆地使用继承呢?送你一句话:慎用继承。

首先我们需要明确,继承存在如下缺陷:

1、父类变,子类就必须变。

2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。

3、继承是一种强耦合关系。

所以说当我们使用继承的时候,我们需要确信使用继承确实是有效可行的办法。那么到底要不要使用继承呢?《Think in Java》中提供了解决办法:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承

例子 :

package com.sheepmu;
class Animal
{
public void eat()
{
System.out.println("父类的 eating...");
}
}
class Bird extends Animal
{
@Override
public void eat()
{
System.out.println("子类重写的父类的 eatting...");
}
public void fly()
{
System.out.println("子类新方法 flying...");
}
}
public class Sys
{
public static void main(String[] args)
{
Animal b=new Bird(); //向上转型
b.eat();
// b.fly(); b虽指向子类对象,但此时子类作为向上的代价丢失和父类不同的fly()方法
sleep(new Male());
sleep(new Female());//传入的参数是子类-----!!
}

public static void sleep(Human h) //方法的参数是父类------!!!  
    {  
     h.sleep();  
    }  

}

[java] view plain copy

package com.sheepmu;

public class Human
{
public void sleep()
{
System.out.println("父类人类 sleep..");
}
}
class Male extends Human
{
@Override
public void sleep()
{
System.out.println("男人 sleep..");
}
}
class Female extends Human
{
@Override
public void sleep()
{
System.out.println("女人 sleep..");
}
}

输出:
子类重写的父类的 eatting...男人 sleep..女人 sleep..
详解:

  1. 向上转型的实现 ** **
    Animal b=new Bird(); //向上转型 b.eat(); // 调用的是子类的eat()方法 b.fly(); // 报错!!!!!-------b虽指向子类对象,但此时子类作为向上转型的代价丢失和父类不同的fly()方法------2.为何不直接Bird b=new Bird();b.eat() 呢?
    这样就没有体现出面向对象的抽象的编程思想呀,降低了代码的可扩展性.
    3.向上转型的好处?
sleep(new Male());//调用方法时传入的参数是子类           sleep(new Female());

** public static void sleep(Human h) //方法的参数是父类**
{
h.sleep();
}
如上代码就是用的向上转型,若是不用向上转型,那么有多少个子类就得在这儿写多少种不同的睡觉方法~~~~~~

如果 你的所有的子类要 转换成父类 , 并都调用重写的方法 ,那么就可以继承.
(可以尝试细分继承,类似接口隔离原则 自己理解)

相关文章

  • 理解--->三大特性之继承

    内容来之 极客学院 和 毛毛虫的小哈 将子类转换成父类,在继承关系上面是向上移动的,所以一般称之为向上转型。由于...

  • Java SE基础面试题

    1、面向对象都有哪些特性以及你对这些特性的理解 1)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的...

  • JavaSE基础

    面向对象都有哪些特性以及你对这些特性的理解 一.继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被...

  • 2019-01-09 Android开发 Java基础知识整理

    JavaSE 基础: 一、Java 面向对象思想 1、面向对象都有哪些特性以及你对这些特性的理解 继承:继承是从已...

  • java基础概念

    java_basic 介绍 java基础 三大特性之—封装 三大特性之—继承 三大特性之—多态 抽象 接口 深拷贝...

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • java中四大特性多态

    概述 我们都知道面向对象有四个基本特性:抽象、封装、继承、多态。这四个特性,概括起来可以这么理解,抽象、封装、继承...

  • 面向对象的三大基本特性,五大基本原则

    透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 封装 封装最好理解了...

  • 面试总结

    OC的理解与特性 . OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率...

  • 组合替代继承

    HeadFirst设计模式第一章阐述的观点是多用组合,少用继承.我的理解是适当使用继承的特性,不过度设计. 继承可...

网友评论

      本文标题:理解--->三大特性之继承

      本文链接:https://www.haomeiwen.com/subject/rmhwgttx.html