Java面向对象多态的详细介绍,简单易懂,看这一篇就够了

Posted 锡兰_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象多态的详细介绍,简单易懂,看这一篇就够了相关的知识,希望对你有一定的参考价值。

文章目录


什么是多态

A: 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。


多态的优点

  • 消除类型之间的耦合关系
  • 可替代性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

多态的分类

重载式多态

重载式多态在编译时已经确定好了。方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。

案例

public void add(int a, int b) 
    int c = a + b;
    System.out.println("两个整数相加得 " + c);

public void add(float a, float b) 
    float c = a + b;
    System.out.println("两个float型浮点数相加得" + c);

重写式多态

重写式多态是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才知道调用的是哪个子类的方法。 这种多态通过函数的重写以及向上转型来实现,我们接下来讲的所有多态都是重写式多态,因为它才是面向对象编程中真正的多态。

多态的向上转型

Q:什么是多态的向上转型?
A:父类的引用指向子类的对象叫做向上转型。

Q:向上转型的怎么写?
A:父类类型 引用名 = new 子类类型();

Q:向上转型有什么特点?
A:编译类型看左边,运行类型看右边。可以调用父类中的所有成员。最终运行效果看子类的具体实现。

案例

 //动物类,拥有一个call()方法
class Animal 
    public void call() 
        System.out.println("动物叫!");
    

 // 狗类,实现父类动物,并重写call()方法
class Dog extends Animal 
    public void call() 
        System.out.println("汪汪!");
    

    public void color() 
        System.out.println("狗狗颜色!");
    

 // 猫类,实现父类动物,并重写call()方法
class Cat extends Animal 
    public void call() 
        System.out.println("喵~");
    

    public void color() 
        System.out.println("猫猫颜色!");
    

 //测试类
public class Test 
    public static void main(String[] args) 
 	    //向上转型
        Animal animal = new Dog();
        animal.call();
        animal = new Cat();
        animal.call();
    

这里 Animal animal = new Dog();将子类对象Dog转化为父类对象Animal,这个时候Animal引用指向的是子类对象,所以调用的方法是子类方法。
向上转型时,子类单独定义的方法会丢失。比如,上面案例中的Dog类和Cat类都定义了自己的call方法,当进行了向上转型后,Animal引用指向Dog类的实例时是访问不到color方法的,Animal.color()会报错。

多态的向下转型

Q:什么是多态的向下转型?
A:子类引用指向父类对象(父类型,实例是子类的实例化)叫做多态的向下转型。通常需要进行强制类型转换。

案例

 //动物类,拥有一个call()方法
class Animal 
    public void call() 
        System.out.println("动物叫!");
    

 // 狗类,实现父类动物,并重写call()方法
class Dog extends Animal 
    public void call() 
        System.out.println("汪汪!");
    

    public void color() 
        System.out.println("狗狗颜色!");
    

 // 猫类,实现父类动物,并重写call()方法
class Cat extends Animal 
    public void call() 
        System.out.println("喵~");
    

    public void color() 
        System.out.println("猫猫颜色!");
    

 //测试类
public class Test 
    public static void main(String[] args) 
    	//向上转型
    	Animal animal = new Dog();
 	    //向下转型
        Dog dog = (Dog)animal;//向下转型,强制类型转换
        dog.color();//输出狗狗颜色!
        Cat cat = (Cat)animal;//报错
        Animal animal = new Animal();
        Dog dog = (Dog)animal;//报错
    

这里需要注意Dog dog = (Dog)Animal;可以正常运行,是因为dog本身就是Dog对象,可以正常转型为Dog,而不能转型为Cataniaml类是Animal对象,他也不能向下转型成任何子类对象。

总结一下:

1)向下转型的前提是父类引用指向的是子类对象,也就是说,向下转型之前,它得先进行过向上转型。
2)向下转型只能转型为本类对象。

指数基金介绍专栏:国企指数(H股指数)详细介绍,最新资料解析,看这一篇就够了

作者:牛大 | 公众号:定投五分钟

大家好,我是牛大。每天五分钟,投资你自己;坚持基金定投,终会财富自由!

技术图片

昨天牛大给大家介绍了恒生指数,没看的朋友可以去公众号看一下。

指数基金介绍专栏(7):恒生指数

 

对于H股指数,估计大部分朋友不是特别了解。牛大也查了一些最新的资料,尽力给大家介绍一下,希望大家能多了解一些。

恒生中国企业指数(简称:国企指数或H股指数),为投资者提供一个反映在香港上市的中国企业的股价表现的指标。

有时简称为国企指数的时候,有朋友会误认为是中国的所有国有企业组成的指数。

其实这里的国企指的是在香港上市的中国企业,虽然在香港上市的大部分公司为国有企业。此国企非彼国企,大家应该明白了吧。

与恒生指数不同的是,国企指数成份股的数目并没有限制,但必须为市值最大,且在恒生综合指数成份股内的H股。国企指数也是由恒生银行属下恒生指数有限公司负责计算。

国企指数于1994年8月8日首次公布,以上市H股公司数目达到10家的日期,即1994年7月8日为基数日。当日收市指数定为1000点,该指数以所有在香港联交所上市的中国H股公司股票为成份股计算得出加权平均股价指数。

技术图片
 

咱们选择的H股指数基金为易方达恒生国企ETF联接A(110031),是一款2012年成立的老牌基金。

目前(2019年8月19日)H股指数点位为10109.15点,1994年起始为1000点,总共涨了10倍多。历史最高为2007年11月1日,恒生中国企业指数曾突破20600点,最高见20609.10点。算上这二十多年的分红,有将近20-30倍的收益。收益也是非常的不错。

技术图片
 

截止到目前(2019年8月19日)为止,H股指数的成分股数量已经扩容到了50只,如下图所示。占权重第一位的大家也许没想到,是一家私有企业,大家基本每天都在用它的产品。各位朋友们不用猜了,它就是腾讯,权重占比10.6%。

技术图片
 

牛大给大家翻译一下,排名前十的分别是:腾讯,中国平安,中国建设银行,中国移动,中国工商银行,中国银行,中海油,招商银行,中国人寿,中国石油化工。前十名权重占比总共为:62.76%。感兴趣的朋友可以通过英文名称查一下其它公司是何方神圣。

技术图片
 

从上图可以看出,按行业来分,权重占比最高的是金融行业,共有20家公司,占比48.51%。次之的分别为为信息技术与通信行业。

等H股指数性价比很高的时候,牛大会带领大家一起定投H股指数,帮助咱们盈利锦上添花。好了,今天牛大就给大家介绍到这里,祝大家生活愉快!

技术图片

 

 

 
技术图片
 

每天花5分钟收看牛大的文章,一起定投基金赚钱。剩下的苦活累活就都交给牛大吧,这也是我每天努力在为大家做的。

每天五分钟,投资你自己。相信牛大:一起努力,咱们终将富有!

以上是关于Java面向对象多态的详细介绍,简单易懂,看这一篇就够了的主要内容,如果未能解决你的问题,请参考以下文章

指数基金介绍专栏:国企指数(H股指数)详细介绍,最新资料解析,看这一篇就够了

Flutter入门这一篇效率文章就够了

MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)

☀️ JAVA NIO? 看这一篇就够了!! ☀️

☀️ JAVA NIO? 看这一篇就够了!! ☀️

Perl 语言输入输出怎么写?控制结构如何用?看这一篇就够了!