zoukankan      html  css  js  c++  java
  • Java面向对象之关键字super 入门实例

    一、基础概念

      (一)super关键字

        super关键字的用法和this相似。this代表的是当前对象。super代表的是父类中内存空间。

        子父类中是不会出现同名属性的情况。

      (二)继承中、成员变量问题

        当成员变量中出现了同名的局部变量,用关键字 this来区分。当父类中出现了同名的成员变量,用关键字 super来区分

      (三)继承中,成员函数问题

        1、子父类中出现一样的方法(返回值类型、函数名、参数列表等都一样),创建子类对象调用该方法时,运行的是子类中的方法。

        2、这种情况称之为函数的另一个特性----(override)覆盖、重写、复写。

        3、注意:

           子类覆盖父类权限必须大于等于父类的权限。

           覆盖中,静态只能覆盖静态,或者被静态覆盖。

      (四)继承中,构造函数问题

        1、创建子类对象,父类中的构造函数也会运行的原因:子类的所有构造函数中的第一行,都有一个默认访问父类中空参数的构造函数super();

        2、调用本类中的构造函数使用this([实参列表])语句。调用父类中的构造函数用super([实参列表])语句。

        3、子类实例化的过程,必须先执行父类中的初始化的原因:子类继承了父类中的内容,所以子类在实例化时,必须要先执行父类中的内容。

        4、注意:

           如果父类中没有空参数的构造函数时,子类的构造函数必须通过super语句指定要访问的父类中的构造函数。

           this()语句和super()语句都必须出现在构造函数的第一行。因为初始化的动作要先执行。所以this()语句和super()语句只能存在一个。

    二、实例代码(一)

     1 class Fu    //默认继承 object
     2 {
     3     int num = 4;
     4     public void show()
     5     {
     6         System.out.println("父类中的成员函数show ......" );
     7     }
     8     Fu()
     9     {
    10         //默认存在语句superz();
    11         //显示初始化。
    12         //构造代码块初始化。
    13         System.out.println("父类中的构造函数Fu ......");
    14     }
    15     Fu(int x)
    16     {
    17         //默认存在语句super();
    18         System.out.println("父类中的构造函数Fu ......"+x);
    19     }
    20 }
    21 class Zi extends Fu
    22 {
    23     //子类和父类的成员变量一样的情况
    24     int num = 5;
    25     //子类和父类的成员函数一样的情况,进行了覆盖
    26     public void show()
    27     {
    28         //局部变量与成员变量也一样的情况
    29         int num = 6;
    30         System.out.println("子类中的成员函数show ...... ");
    31         
    32         System.out.println("num = "+num);//输出子类中局部变量num的值
    33         System.out.println("num = "+this.num);//输出子类中成员变量num的值
    34         System.out.println("num = "+super.num);//输出父类中成员变量num的值
    35     }
    36     //子类和父类的构造函数一样的情况。子类和父类的语句都执行。
    37     Zi()
    38     {
    39         //默认存在语句super();
    40         
    41         System.out.println("子类中的构造函数zi ......" );
    42     }
    43     Zi(int x)
    44     {
    45         //默认存在语句super();
    46         super(8);//显示指定super的方式来访问父类中的构造函数。必须定义在第一行
    47         System.out.println("子类中的构造函数Zi ......"+x);
    48     }
    49 }
    50 class SuperDemo 
    51 {
    52     public static void main(String[] args) 
    53     {
    54         Zi z1 = new Zi();
    55         z1.show();
    56         Zi z2 = new Zi(5);
    57         z2.show();
    58     }    
    59 }

      代码运行

      

    (三)、实例代码(二)

     1 class Person
     2 {
     3     private String name;
     4     private int age;
     5     
     6     //父类Person的构造函数    
     7     Person(String name,int age)
     8     {
     9         this.name = name;
    10         this.age = age;
    11     }
    12     public void setName(String name)
    13     {
    14         this.name = name;
    15     }
    16     public void setAge(int age)
    17     {
    18         this.age = age;
    19     }
    20     public String getName()
    21     {
    22         return name;
    23     }
    24     public int getAge()
    25     {
    26         return age;
    27     }
    28 }
    29 //Student继承Person
    30 class Student extends Person
    31 {
    32     Student(String name,int age)
    33     {
    34         super(name,age);//用super调用父类Person的构造函数。
    35     }
    36     public void study()
    37     {
    38         System.out.println("name: "+this.getName()+"   age: "+this.getAge()+"    study ......");
    39     }
    40 }
    41 //Worker继承Person
    42 class Worker extends Person
    43 {
    44     Worker (String name,int age)
    45     {
    46         super(name,age);////用super调用父类Person的构造函数。
    47     }
    48     public void work()
    49     {
    50         System.out.println("name: "+this.getName()+"   age: "+this.getAge()+"    work ......");
    51     }
    52 }
    53 class SuperDemo1 
    54 {
    55     public static void main(String[] args) 
    56     {
    57         Student p1 = new Student("xiaohong",18);
    58         p1.study();
    59         Worker p2 = new Worker("xiaoming",32);
    60         p2.work();
    61     }    
    62 }

      代码运行

      

  • 相关阅读:
    总结Cnblogs支持的常用Markdown语法
    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
    我的博客今天开通了,请多指教!
    技术分析:Femtocell家庭基站通信截获、伪造任意短信
    数据库防火墙如何防范SQL注入行为
    Pjax.js防刷新技术
    【写给新人】做开发几年的个人经历
    WebRTC之PeerConnection的建立过程
    基于Licode demo的屏幕共享功能的实现
    基于WebRTC的MCU开源项目Licode的环境搭建
  • 原文地址:https://www.cnblogs.com/zhuxr/p/8884666.html
Copyright © 2011-2022 走看看