zoukankan      html  css  js  c++  java
  • 继承与多态

    运行 TestInherits.java 程序:

    基类构造在前截图:

    基类构造在后:

    在运行子类对象时,基类的构造函数要在子类构造函数的首位。

    为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

    构造方法的目的是初始化成员,基类都没有初始化,子类继承肯定不会初始化,会报错。

    address程序执行结果

    神奇的+号

    执行结果不是“ff”而是和建立的f对象中的方法连接。   在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

    类型转换

    不能运行的代码:

    d=m;

    d=c;
    c=(Cat)m;

    原因:

    1.子类对象可以被视为是其父类的一个对象
    2.父类对象不能被当作是某一个子类的对象。
    3.如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。 
    4.如果父类对象与引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用。

    c=(Cat)m中不显示错误,会抛出异常,相当于“子=(子)父”,。如果父类变量引用的是正确的子类型(即父类对象要想造型转换后赋给子类对象,其本身引用的是子类型的内存空间),赋值将执行。如果父类变量引用的是不相关的子类型,将会生成class castException异常。

    1.类型转换必须在继承层次类转换,即超类与子类之间.
    2.兄弟类之间不存在继承,因此也不存在类型转换.

    故狗的不能给猫。

    在实践中理解把握复杂的知识-1

    个人想法:

    第一个结果:100

    第二个结果:200

    第三个结果:200

    第四个结果:201

    第五个结果:201

    第一第二个结果很明显,直接调用自己的方法就是100,200第三个,把儿子给父亲是合法的,所以是200,第四个想的是201,第五个为把父亲强制转换为儿子执行儿子的方法是201.

    实验截图

    总结

    对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

    如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。 如果子类被当作父类使用,则通过子类访问的字段是父类的!

  • 相关阅读:
    Spring AOP里的静态代理和动态代理,你真的了解嘛?
    redis的三种启动方式
    Linux MySQL分库分表之Mycat
    Linux 之Mycat搭建报错 java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException
    Linux MySQL Proxy 读写分离
    Linux MySQL集群搭建之主从复制
    Linux 虚拟机详细安装MySQL
    MySQL 性能优化细节
    MySQL 性能优化之慢查询
    MySQL事务处理
  • 原文地址:https://www.cnblogs.com/z245894546/p/7804641.html
Copyright © 2011-2022 走看看