zoukankan      html  css  js  c++  java
  • 动手动脑之继承与接口

    动手实验一:继承条件下的构造方法调用

    运行 TestInherits.java 示例

    package demo;

    class Grandparent {

        public Grandparent() {

            System.out.println("GrandParent Created.");

        }

        public Grandparent(String string) {

            System.out.println("GrandParent Created.String:" + string);

    }

    }

    class Parent extends Grandparent {

        public Parent() {

            //super("Hello.Grandparent.");

            System.out.println("Parent Created");

           // super("Hello.Grandparent.");

        }

    }

    class Child extends Parent {

        public Child() {

            System.out.println("Child Created");

        }

    }

    public class number {

        public static void main(String args[]) {

            Child c = new Child();

        }

    }

    观察输出,注意总结父类与子类之间构造方法的调用关系,修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

    运行结果:

    第一次:GrandParent Created.

    Parent Created

    Child Created

    第二次:GrandParent Created.String:Hello.Grandparent.

    Parent Created

    Child Created

    如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句 中进行调用。

    动手实验二:思索

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

    构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。不能反过来调用也是这个原因,因为父类根本不知道子类有什么变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!

    动手实验三:请自行编写代码测试以下特性:

    在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

    同上动手动脑一:

    package demo;

    class Grandparent {

        public Grandparent() {

            System.out.println("GrandParent Created.");

        }

        public Grandparent(String string) {

            System.out.println("GrandParent Created.String:" + string);

        }

    }

    class Parent extends Grandparent {

        public Parent() {

            super("Hello.Grandparent.");

            System.out.println("Parent Created");

        }

    }

    public class number {

        public static void main(String args[]) {

        Parent p=new Parent();

        }

    }

     

     

  • 相关阅读:
    前端兼容性问题总结
    javascript中Array类型常用方法
    TCP/IP基础知识
    Ajax
    angular 过滤器(日期转换,时间转换,数据转换等)
    angular学习笔记
    TCP协议三次握手过程分析
    TCP/IP基础知识
    Halcon形态学处理
    Halcon软件介绍与图像基本知识
  • 原文地址:https://www.cnblogs.com/love528/p/4944727.html
Copyright © 2011-2022 走看看