Java 进阶P-4.6+P-4.7

向上造型

造型cast

  • 子类的对象可以赋值给父类的变量
  • 注意! java中不存在对象对对象的赋值!!
  • 父类的对象不能赋值给子类的变量
  • 可以用造型:
    •   c=(Car) v;

  (只有当v这个变量实际管理的是Car才行)

执行流程:

在new Student()的时候由于继承关系,先后分别先打印了I’m Person!和I’m Student。执行Person构造时name被赋值为”person”

执行Student构造时name被重新赋值为”haydn”。所以打印了name=haydn。由于子类重写了父类的方法,所以并没有打印HelloWorld,而是打印了stuClassName=菜鸟营一班。证明产生了向上造型。

 

注意:父类不能引用子类中的属性或方法。只能由子类重写父类中的方法或属性。

代码如下:

 

public static void main(String[] args) {

        Person pstu = new Student();

        System.out.println("name="+pstu.name);      

        pstu.sayHi();

        //编译不通过,父类不能直接调用子类属性和方法

        //pstu.className;

        //pstu.stuTalk();

    }

 

是重写时对访问权限和返回值的说明:

在Java中向上造型的父类被认为是“大”的,所以在向上造型的时候重写父类方法,方法的访问权限一定要大于等于父类。返回值要和父类相同

 

例子代码:

 

    //编译通过,访问权限和父类一致为protected

    protected void sayHi() {        

        name="rose";

        System.out.println(title);

        }

    //编译通过,访问权限大于父类

    public void sayHi() {       

        name="rose";

        System.out.println(title);

        }

    //编译不通过,权限小于父类

    private void sayHi() {      

        name="rose";

        System.out.println(title);

        }   

    //编译不通过,数据类型不一致

    protected int sayHi() {

        return 1;

    }

 

总结:向上造型即允许一种类型有不同的实现,要注意重写父类方法返回值和访问权限的问题。要注意父类是不可以访问子类对象的属性或方法的。

 

多态

函数调用的绑定

  • 当通过对象变量调用函数的时候,调用哪个函数这件事情叫做绑定
  • 静态绑定:根据变量的声明类型来决定
  • 动态绑定:根据变量的动态类型来决定
  • 在成员函数中调用其他成员函数也是通过this这个对象变量来调用的

覆盖override

  • 子类和父类中存在名称和参数表完全相同的函数,这一对函数构成覆盖关系
  • 通过父类的变量调用存在覆盖关系的函时,会调用变量当时所管理的对象所属的类的函数

 

posted @   ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示