精华内容
下载资源
问答
  • Java中super详解

    2021-05-13 20:51:30
    在说super之前先说一下Java中的继承,继承是Java中面向对象编程技术的重要基石,因为它允许创建分等级层次的类。继承就是子类继承父类的行为和特征,就是方法和属性。私有的属性和方法子类是能继承的,但是子类无法...

    目录

    Java中super详解

    super的作用:

    1.     通过super可以访问父类的构造方法 

    2.   通过super可以访问父类的属性(非私有)

    3.        通过super可以访问父类的方法(非私有的方法)


    Java中super详解

    在说super之前先说一下Java中的继承,继承是Java中面向对象编程技术的重要基石,因为它允许创建分等级层次的类。继承就是子类继承父类的行为和特征,就是方法和属性。私有的属性和方法子类是能继承的,但是子类无法直接调用,调用父类的私有属性需要在父类中声明get和set方法,这里final类型的父类成员私有变量也能被子类继承,而父类中的私有方法,子类虽然继承了,但是并不能够使用。

    继承的限制:Java中只有单继承,多重继承,没有多继承(一个子类有多个父类的情况不允许存在)

    java权限修饰符
    修饰符子类其他包
    public
    protected×
    default××
    private×××

    super的作用:

    1.     通过super可以访问父类的构造方法 

    调用父类构造方法的代码必须放在子类构造方法的第一行,不这样执行会报错(规定的格式),用super调用属性时不用遵守。

    当父类没有无参构造方法时,不能直接使用super();调用父类构造方法

    设置父类Person

    package com.kkb.task010203.pojo;
    
    import java.util.Objects;
    
    public class Person {
        private int age;
        private String name;
    
        public Person() {
            System.out.println("父类无参构造方法被调用");//无参构造函数
        }
    
        public Person(int age, String name) {
        //有参构造函数
            this.age = age;
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return age == person.age &&
                    Objects.equals(name, person.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(age, name);
        }
    
        @Override
        public String toString() {
            return "姓名"+this.name+",年龄"+this.age;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public void say(){
    //父类中的say方法
            System.out.println("我叫"+name+"今年"+age+"岁了");
        }
    }
    

    子类Teacher

    package com.kkb.task010203.pojo;
    
    public class Teacher extends Person{
        public Teacher() {//子类的构造方法
    
                super(14,"李四");//调用父类中有参构造方法
            }
    }

    测试类

    package com.kkb.task010203.pojo;
    
    public class MainTest {
        public static void main(String[] args) {
            Teacher teacher = new Teacher();
            teacher.say();//由于子类中没有重定义say方法,这里调用Person父类中的say方法
        }
    }
    

    输出结果

    2.   通过super可以访问父类的属性(非私有)

    我们在父类属性中添加一个public属性 

    在子类方法中通过super操作Person父类中sex属性

    这时父类中的sex属性已经被修改,可以通过print验证。

    3.        通过super可以访问父类的方法(非私有的方法)

    利于super调用Person父类中的setName()方法修改Teacher对象的姓名属性

     

    输出结果

     

    展开全文
  • java中Super到底是什么意思

    千次阅读 2021-02-12 11:09:53
    要说super就先要说this。"this",作为一个特殊的关键字,它的规则如下:1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。2。可以在一个类的非...

    要说super就先要说this。

    "this",作为一个特殊的关键字,它的规则如下:

    1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。

    2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以对它调用成员函数,把它传递给别的函数,等等等等。只要一个C类型的final变量可以出现的地方,它就可以出现。

    "super"。它和"this"类似,但是也有不同的地方。

    1。表示调用父类的构造函数。也是一个特殊语法,不是变量,没有什么类型。

    2。可以在一个类的非static成员内部使用。比如super.method()。

    但是,注意,这个super.method()只是长得跟some_var.method()一样,一个语法糖而已。实质上,"super"根本不是一个变量。

    为什么不是?因为如果是就坏了。java里面有一个金科玉律:任何public非static函数的调用都是多态的。

    所以,如果super是个变量,也指向当前对象,那么,不管super的静态类型是什么super.method()必然调用的是子类的那个版本,而不会是我们期望的,静态地选择父类的那个版本。

    所以,你只要把super.xxx看成一个特殊的语法,比如理解为“super::xxx”就好了。

    既然super不是一个变量,那么不能把它象一个普通变量那样"==",或者传递给某个函数就看起来很正常了,是么?何况,你其实也用不着它,有this你这些要求就都可以办到了。

    3。super的另外一个作用是调用父类的protected函数。只有通过"super"这个魔咒,我们才能操作父类的protected成员,别无它法。

    借鉴于:https://www.cnblogs.com/wulianshang/p/5809898.html

    3."超"关键字(super keyword)

    马克-to-win,Super是一个参考(或说指针)指向他紧邻的父类(见下面的例子)。

    用super可以指向被隐藏的父类的同名成员。

    3.1 super指向父类的成员

    注意: 下例中:子类和父类都有i,我们一共有两个i,用super可以指向前一个父类的i。

    例1.3.1---

    class AMark_to_win {

    int i;

    }

    class B extends AMark_to_win {

    int i;

    public B(int x, int y) {

    super.i = x;//AMark_to_win 的 i被赋值

    i = y;//B的i被赋值

    }

    public void show() {

    System.out.println("i in superclass: " + super.i);

    System.out.println("i in subclass: " + i);

    }

    }

    public class Test {

    public static void main(String[] args) {

    B b = new B(2, 3);

    b.show();

    }

    }

    ————————————————

    版权声明:本文为CSDN博主「mark_to_win」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/mark_to_win/article/details/38663289

    展开全文
  • java中super关键字的作用

    千次阅读 2021-03-13 18:51:05
    1.super关键字可以在子类的构造方法显示地调用父类的构造方法,super()必须为子类构造函数的第一行。2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字时也会覆盖父类的成员...

    1.super关键字可以在子类的构造方法中显示地调用父类的构造方法,super()必须为子类构造函数中的第一行。

    2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字时也会覆盖父类的成员变量或方法,这个时候要想访问父类的成员变量或方法只能通过super关键字来访问,子类方法中的super.方法名()不需要位于第一行。

    package test;

    class FatherClass {

    public int value;

    public void f() {

    value=100;

    System.out.println("父类的value属性值="+value);

    }

    public FatherClass(){

    System.out.println("FatherClass constructor");

    }

    }

    class ChildClass extends FatherClass {

    /**

    * 子类除了继承父类所具有的value属性外,自己又另外声明了一个value属性,

    * 也就是说,此时的子类拥有两个value属性。

    */

    public ChildClass(){

    super();

    System.out.println("ChildClass constructor");

    }

    public int value;

    /**

    * 在子类ChildClass里面重写了从父类继承下来的f()方法里面的实现,即重写了f()方法的方法体。

    */

    public void f() {

    //使用super作为父类对象的引用对象来调用父类对象里面的f()方法

    //这个value是子类自己定义的那个value,不是从父类继承下来的那个value

    value=200;

    super.f(); //父类的value属性值=100

    System.out.println("子类的value属性值="+value); //子类的value属性值=200

    //打印出来的是子类自定义的那个value的值,这个值是200

    System.out.println(value); //200

    /**

    * 打印出来的是父类里面的value值,由于子类在重写从父类继承下来的f()方法时,

    * 第一句话“super.f();”是让父类对象的引用对象调用父类对象的f()方法,

    * 即相当于是这个父类对象自己调用f()方法去改变自己的value属性的值,由0变了100。

    * 所以这里打印出来的value值是100。

    */

    System.out.println(super.value); //100

    }

    }

    public class SuperKeyTest {

    public static void main(String[] args) {

    ChildClass cc = new ChildClass();

    cc.f();

    }

    }

    展开全文
  • Java中super关键字的使用(在实例方法)super和this都可以使用在实例方法,并且都不能使用在静态方法当中,“this”大部分情况下都是可以省略的,只有在方法区分局部变量和实例变量的时候不能省略。那“super”...

    Java中super关键字的使用(在实例方法中)

    super和this都可以使用在实例方法中,并且都不能使用在静态方法当中,“this”大部分情况下都是可以省略的,只有在方法中区分局部变量和实例变量的时候不能省略。那“super”什么时候可以省略,什么时候不能省略呢?

    //书

    public class Book {

    //书名

    String name;

    //构造方法

    public Book(){

    super();

    }

    public Book(String name){

    super();

    this.name = name;

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    //纸质书

    public class PaperBook extends Book {

    //构造方法

    public PaperBook(){

    super();

    }

    public PaperBook(String name){

    super();

    this.name = name;

    }

    //打印书名

    public void printName(){

    System.out.println("this.name->书名 : " + this.name);

    System.out.println("super.name->书名 : " + super.name);

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    public class BookTest {

    public static void main(String[] args) {

    PaperBook book1 = new PaperBook("零基础学Java卷I");

    book1.printName();

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    运行结果如下图所示:

    2349b0e5addcfbe36f078f572d1b4e5f.png

    图14-11:super和this

    我们发现printName()方法中的super.name和this.name最终输出结果是一样的,这是为什么呢?请看以上程序执行的内存图:

    25d7ae4b55a6cf2c34319aa927a01191.png

    图14-12:父类的构造方法执行结束之后的内存图

    7e0c4a47b356f97fe08592a46a7aa585.png

    图14-13:子类的构造方法执行结束之后的内存图

    通过以上内存结构图发现this.name和super.name实际上是同一块内存空间,所以它们的输出结果是完全一样的。接下来,我们再把以上的PaperBook类修改一下:

    //纸质书

    public class PaperBook extends Book {

    String name; //在子类中也定义了一个name属性

    //构造方法

    public PaperBook(){

    super();

    }

    public PaperBook(String name){

    super();

    this.name = name;//这里的this.name代表子类的name

    }

    //打印书名

    public void printName(){

    System.out.println("this.name->书名 : " + this.name);

    System.out.println("super.name->书名 : " + super.name);

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    运行结果如下图所示:

    c547e4fd673f3147a43921e3400ce063.png

    图14-14:super和this的区别

    为什么super.name是null呢,我们一起来看看以上程序的内存图:

    0f141631b2c13d2d8102187c59c74ae9.png

    图14-15:父类Book的构造方法执行之后的内存图

    6749c85f3056097763dafba13ae704a9.png

    图14-16:子类PaperBook的构造方法执行结束之后的内存图

    通过以上内存图可以清楚的看到,父类Book的构造方法在执行的时候给super.name赋值null,子类PaperBook的构造方法在执行的时候给this.name赋值“零基础学Java卷I”,由于在子类PaperBook中定义了重名的变量name导致在当前对象中有两个name,一个是从父类中继承过来的,一个是自己的,如果此时想访问父类中继承过来的name则必须使用super.name,当直接访问name或者this.name都表示访问当前对象自己的name。

    通过以上的学习,大家知道super在什么情况下不能省略了吗?当父类中有该实例变量,子类中又重新定义了同名的实例变量,如果想在子类中访问父类的实例变量,super不能省略。实例方法是这样吗?我们可以来测试一下,请看代码:

    public class Vip {

    //Vip默认继承Object

    //重写从Object类中继承过来的toString()方法

    public String toString(){

    return "我是金牌会员";

    }

    public void test(){

    System.out.println(super.toString());

    System.out.println(this.toString());

    System.out.println(toString());

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    public class VipTest {

    public static void main(String[] args) {

    Vip vip = new Vip();

    vip.test();

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    运行结果如下图所示:

    78d8c11e484c972f5e8b18516b9401b7.png

    图14-17:运行结果

    通过以上测试得出最终结论:父类和子类中有同名实例变量或者有同名的实例方法,想在子类中访问父类中的实例变量或实例方法,则super是不能省略的,其它情况都可以省略。

    展开全文
  • 本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考。 任务调度是指基于给定1.子类的...
  • 【单选题】下列关于Java中super关键字的说法,正确的是( )。【单选题】如图所示,近年来我国三大产业劳动力占比不断调整、变化,下列认识 错误 的是【单选题】( ) 是指价值工程研究对象所具有的能够满足某种需求的一...
  • java中super关键字与this关键字的区别是什么发布时间:2020-09-01 14:58:57来源:亿速云阅读:97作者:小新这篇文章给大家分享的是有关java中super关键字与this关键字的区别是什么的内容。小编觉得挺实用的,因此...
  • 在确定薪酬水平时,中关a企业通常可以采用( )策略。键字在线大学能够帮您做什么呢?法错在线大学几个关键概念有哪些?下列选项商业画布主要包括哪几大类?中关a价值网的特征分别包括哪些?电阻的星形连接与...
  • 我们一下子全部掌握父类不是件容易的事,可以在学习super中体验父类的方法、属性等要点。需要说明的是,除了父类外,super还可以隐藏和覆盖变量。下面我们就这两方面的super 使用为大家带来展示,具体代码如下:1....
  • Java中super关键字用法

    2021-03-17 14:45:19
    super关键字主要用在子类继承父类时,咱们程序员在子类的方法里面想要调用父类的方法,变量时。在子类的main方法里面是不让用super、this的,因为main是static修饰的,static修饰的方法里面不让用这两个关键字。1、...
  • 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位class Base {Base() {System.out.println("Base");}}public class Checket extends Base {Checket() {super();//调用父类的构造方法,一定要放在...
  • 展开全部错误的原因:62616964757a686964616fe58685e5aeb931333335326231①super(name);这条语句是调用父类的(button)具有一个参数的构造方法。(参数name其实就是这个...修改后的代码:importjava.awt.AWTEvent...
  • 展开全部super(size,name)是调用父类的构32313133353236313431303231363533e58685e5aeb931333337396236造函数,也就是Base的构造函数Base(size,name)。你的Base类又没有无参构造函数,当然会报错。如果非要删掉的话...
  • JAVA 中super的三种用法

    2021-10-10 19:15:36
    java中super的用法 super只在子类出现 super有三种用法 【1】 super.xxx;xxx可以是类的属性。 例如super.name;即从子类获取父类name属性的值 【2】 super.xxx();xxx()可以是类的方法名。 super.xxx();的意义...
  • java中super 的两种用法

    2021-02-26 18:36:59
    通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言的全局函数和全局变量。但是,并不是说有了这种便利,...在Java中,this通常指当前对象,super则指父类的。当你想要引...
  • Java中super

    2021-03-16 02:44:49
    java中super()是什么是不是什么类的方法 在创建窗口使用的super1)super(参数):调用基类的某一个构造函数(应该为构造函数的第一条语句) 2)this(参数):调用本类另一种形成的构造函数(应该为构造函数的...
  • java中super的作用

    2021-02-12 11:30:56
    super()的作用super能够用来訪问超类的构造方法...引用父类所隐藏的语法格式例如以下:super(參数列表)或super.方法名(參数列表)以下通过代码展示一下super的使用方法:package cn.demo;public class Demo1 {publ...
  • java中super是什么

    千次阅读 2021-03-06 01:51:38
    java中super是什么发布时间:2020-07-01 11:00:48来源:亿速云阅读:83作者:Leahjavasuper是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来...
  • Java中super的三种用法

    2021-03-27 13:06:02
    在子类成员方法,访问父类的成员变量 System.out.println(super.num);//调用父类的num 在子类的成员方法,访问父类的成员方法 super.num();//访问父类的num方法 在子类的构造方法,访问父类的构造...
  • java中super怎么用?

    2021-03-08 09:49:09
    Super就是用来调用父类的东西的。比如调用父类的方法或成员变量。class Person{public int c=12;private String name;private int age;protected void setName(String name){this.name=name;}protected void setAge...
  • this 和super在构造函数只能有一个,且都必须是构造函数当中的第一行。super关键字,子类可以通过它调用父类的构造函数。1、当父类的构造函数是无参构造函数时,在子类的构造函数,就算不写super()去调用...
  • Java中super关键字的三种用法: 在子类的成员方法,访问父类的成员变量。 在子类的成员方法,访问父类的成员方法。 在子类的构造方法,访问父类的构造方法。
  • Java中super关键字的用法

    千次阅读 2021-01-05 11:02:28
    下面有一些代码关于this和super在继承的一些用法 package net.onest.demo2; public class Person { private String name; private int age; public String getName() { System.out.println("super...
  • Java泛型的“通配符(Wildcards)”和“边界(Bounds)”的概念。 extends T>:是指“上界通配符(Upper Bounds Wildcards)” super T>:是指“下界通配符(Lower Bounds Wildcards)”为什么要用通配符和边界?...
  • packagetestCasting;publicclassAnimal{Stringeyes;intage;publicAnimal(){}}classDogextendsAnimal{...publicDog(Stringeyes,intage,Stringfurcolor){super();this.eyes...package testCasting;public ...
  • 以前也只是对这个super方法一知半解,没有深入的去探索它到底什么用处,用在什么情景当中,今天看了一篇博文,稍算有些了解了class Son {Son(){print ('son')};}如果只是这样,那么构造Son之前会在后台调用一下super...
  • super 可以用来调用父类的方法或构造器 调用父类的方法: 若父类的某些方法对子类不适用。即可以在子类提供一个新的方法来覆盖/重写(override)父类的这个方法 eg:Manager 方法继承了 Employee 方法,...
  • java 关键字super详解一、super关键字在JAVA使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用...
  • 1 当子类的构造函数需要显式调用父类的构造函数时,super()必须为构造函数的第一条语句2 super()的参数可以与父类的构造函数的参数数目一直,若无父类的构造函数,super()无参数时会调用系统默认的无参构造函数/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,101,903
精华内容 440,761
关键字:

java中的super

java 订阅