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

  • 相关阅读:
    SpringBoot jar包不支持jsp
    Spring Boot 启动报错:LoggingFailureAnalysisReporter
    spring boot与spring mvc的区别是什么?
    解决配置JAVA_HOME JDK版本不变的问题
    Linux下修改Mysql的用户(root)的密码
    CentOS/Linux 解决 SSH 连接慢
    Linux查看进程的所有子进程和线程
    Linux命令之pstree
    使用awk批量杀进程的命令
    lucene 自定义评分
  • 原文地址:https://www.cnblogs.com/shunran/p/3479048.html
Copyright © 2011-2022 走看看