zoukankan      html  css  js  c++  java
  • Java中super的用法并与this的区别(转载)

    一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行

    public class Demo1 {
        public static void main(String[] args) {
            Sub sub=new Sub();
        }
    }
    
    class Base {
        public Base() {
            System.out.println("Base");
        }
    }
    
    class Sub extends Base {
        public Sub() {
            //调用父类的构造方法,必须为第一行
            super();
            System.out.println("Sub");
        }
    }

    运行结果:

    Base
    Sub

    二.用super访问父类中被隐藏的成员变量或方法

    有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,就需要用到super.

    public class Demo2 {
        public static void main(String[] args) {
            City city=new City();
            city.setName();
        }
    }
    
    class Country {
        String name;
        
        void setName() {
            name="China";
        }
    }
    
    class City extends Country {
        String name;
        
        void setName() {
            name="nanjing";
            //调用父类的成员方法
            super.setName();
            System.out.println(name);
            //调用父类的成员变量
            System.out.println(super.name);
        }
    }

    运行结果:

    nanjing
    China

    三.用super直接传递参数

    public class Demo3 {
        public static void main(String[] args) {
            Chinese ch=new Chinese();
            ch=new Chinese("小明");
            ch=new Chinese("小花",22);
        }
    }
    
    class Person {
        //静态方法
        public static void show(String s) {
            System.out.println(s);
        }
        
        public Person() {
            show("A Person");
        }
        
        public Person(String name) {
            show("A person name is: "+name);
        }
    }
    
    class Chinese extends Person {
        public Chinese() {
            //调用父类的构造方法
            super();
            show("A chinese");
        }
        
        public Chinese(String name) {
            //调用父类具有相同形参的构造方法
            super(name);
            show("his name is:" +name);
        }
        
        public Chinese(String name, int age) {
            //调用本类具有相同形参的构造方法
            this(name);
            show("his age is:"+age);
        }
    }

    运行结果:

    A Person
    A chinese
    A person name is: 小明
    his name is:小明
    A person name is: 小花
    his name is:小花
    his age is:22

    四.super与this的异同

    注:本文转载自http://blog.csdn.net/anmei2010/article/details/4093118

  • 相关阅读:
    PowerDesigner
    人工智能
    Tomcat已经配置好了,但是访问localhost:8080出错
    SQL重复记录查询-count与group by having结合查询重复记录
    SQL SERVER下图片的插入与读取(转)
    plsql中文乱码问题(显示问号)转
    2018福大软工实践第二次作业
    2018福大软工实践第一次作业
    2018福大软工实践第一次作业-自我介绍
    2017《面向对象程序设计》课程作业八
  • 原文地址:https://www.cnblogs.com/shunran/p/3479048.html
Copyright © 2011-2022 走看看