zoukankan      html  css  js  c++  java
  • Java课程作业之动手动脑(四)

    1.继承条件下的构造方法调用

    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 TestInherits {
        public static void main(String args[])
         {
    
               Child c = new Child();
         }      
    }

    结论:通过super调用基类构造方法,必须是子类构造方法中的第一个语句。子类的构造方法在运行之前,必须调用父类的构造方法。因为子类必须继承父类的变量和方法。如果不先给父类中的变量赋值,则子类中从父类继承的变量没有赋值。所以不能反过来先给子类赋值。

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

    class fu
    {
        public void A()
         {
                System.out.println("Parent ");
              }
    }
    class zi extends fu
    {
        public void A()
         {
            super.A();
            System.out.println("Child ");
          }
    }
    public class Test {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
                        zi c = new zi();
                        c.A();
        }
    }

    结论:

     Java“方法覆盖”的语法规则

    (1)覆盖方法的允许访问范围不能小于原方法。

    (2)覆盖方法所抛出的异常不能比原方法更多。

    (3)声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。

    (4)不能覆盖静态方法。

    3.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

    m=d;

    d=m;

    d=(Dog)m;

    d=c;

    c=(Cat)m;

    结论:第二句和第四句会出错

    原因:父类不可直接给子类赋值,子类可以直接给父类赋值,同为子类不能相互赋值,父类可强制类型转换给子类赋值

    4.运行以下测试代码

    (1). 左边的程序运行结果是什么?

    (2). 你如何解释会得到这样的输出?

    (3). 计算机是不会出错的,之所以得 到这样的运行结果也是有原因的,

    那么从这些运行结果中,你能总 结出Java的哪些语法特性?

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。 这个特性实际上就是面向对象“多态”特性的具体表现。

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

  • 相关阅读:
    唯一元素List UniqueList
    汉诺塔 Hanoi 递归示例demo附代码
    TreeView控件保存恢复结点展开状态
    F#个人学习笔记2(F# survey)
    F#个人学习笔记1(F# survey)
    多文件上传控件(附示例下载)
    由desktopsavemode引起的Emacs配置失效
    Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
    Emacs的Tab键
    Emacs+highlightparentheses高亮括号
  • 原文地址:https://www.cnblogs.com/zwang/p/9890528.html
Copyright © 2011-2022 走看看