zoukankan      html  css  js  c++  java
  • super关键字

      ` 一.用super操作被隐藏的成员变量和方法

      子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所拥有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。下面的例一中,子类使用super访问和调用被子类隐藏的成员变量和方法。

    例一:

    package superGuanjianzi;
    
    class Sum { 
        int n;
        float f() {
            float sum=0;
            for(int i=1;i<=n;i++){
                sum=sum+i;
            }
            return sum;
        }
    }
    
    class Average extends Sum{
        int n;
        float f() {
            float c;
            super.n=n;
            c=super.f();
            return c/n;
        }
        float g() {
            float c;
            c=super.f();
            return c/2;
        }
    }
    
    public class Liyi {
    
        public static void main(String[] args) {
            Average aver=new Average();
            aver.n=100;
            float resultOne=aver.f();
            float resultTwo=aver.g();
            
            System.out.println("resultOne="+resultOne);
            System.out.println("resultTwo="+resultTwo);
        }
    
    }

    运行结果如下:

    resultOne=50.5
    resultTwo=2525.0

    若将例一中的Liyi类中的代码

    float resultOne=aver.f();
    float resultTwo=aver.g();

    更改次序为:

    float resultTwo=aver.g();
    float resultOne=aver.f();

    程序的输出结果为:

    resultOne=50.5
    resultTwo=0.0

    二.使用super调用父类的构造方法

       当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是説,如果子类的构造方法没有明显的指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。

      由于子类不继承父亲的构造方法,因此,子类在其构造方法中需使用super来调用父亲的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认的有:

    super();

    在下面的例子中UniverStudent是Student的子类,UniverStudent子类在构造方法中使用了super关键字。

    例二:

    package superGuanjianzi;
    
    class Student{
        int number;
        String name;
        Student(){
        }
        Student(int number,String name){
            this.number=number;
            this.name=name;
            System.out.println("我的名字是"+name+",学号是:"+number);
        }
    }
    
    class UniverStudent extends Student{
        boolean 婚否;
        UniverStudent(int number,String name,boolean b){
            super(number,name);
            婚否=b;
            System.out.println("婚否="+婚否);
        }
    }
    
    public class Lier {
    
        public static void main(String[] args) {
            //UniverStudent zhang=new UniverStudent(9901,"何晓林",false);
            new UniverStudent(9901,"何晓林",false);
        }
    
    }
  • 相关阅读:
    VM CentOS建立共享文件夹实现VS Code在windows环境下go开发,在centos环境里编译
    Centos7安装protobuf3.6.1
    C++继承汇总(单继承、多继承、虚继承、菱形继承)
    用 Python 发邮件
    C# Task任务教程
    C#获取IP和默认网关
    GO语言从入门到放弃
    Go结构体标签
    解除百度云浏览器端对下载大文件的限制
    移动浏览器横屏
  • 原文地址:https://www.cnblogs.com/liyajuan333/p/11686219.html
Copyright © 2011-2022 走看看