「javasuper引用」javasuper函数

博主:adminadmin 2023-01-12 11:03:09 1511

今天给各位分享javasuper引用的知识,其中也会对javasuper函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中Super是什么意思?

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

super是引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名。

Java中super是什么意思?

super在java的子类中指代父类引用

java中,super的几种用法:

1、子类的构造函数如果要引用super的话,必须把super放在函数的首位

class Base {

    Base() {

        System.out.println("Base");

    }

}

public class Checket extends Base {

    Checket() {

        super();//调用父类的构造方法,一定要放在方法的首个语句

        System.out.println("Checket");

    }

 

    public static void main(String argv[]) {

        Checket c = new Checket();

    }

}

如果想用super继承父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为的语句,但是又用了super继承父类的构造方法。那么以前所做的修改就都回到以前了,就是说又成了父类的构造方法了。

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

class Country {

    String name;

 

    void value() {

        name = "China";

    }

}

 

class City extends Country {

    String name;

 

    void value() {

        name = "Hefei";

        super.value();//不调用此方法时,super.name返回的是父类的成员变量的值null

        System.out.println(name);

        System.out.println(super.name);

    }

 

    public static void main(String[] args) {

        City c=new City();

        c.value();

    }

}

为了在子类中引用父类中的成员变量name和方法value(),在代码中使用了super、super.name和super.value(),若不调用super.value()时,super.name返回父类成员变量默认值null,调用此方法时,super.value()方法把成员变量name赋值为China,再利用super.name调用父类的成员变量的值。

另外,要注意的是super.name调用的是成员变量的

class Country {

    String name="xianfan";

 

    String value(String name) {

        name = "China";

        return name;

    }

}

 

class City extends Country {

    String name;

 

    String value(String name) {

        name = "Hefei";

        super.value("失败");//不调用此方法时,super.name返回的是父类的成员变量的值null

        System.out.println(name);

        System.out.println(super.name);

        return name;

    }

 

    public static void main(String[] args) {

        City c=new City();

        c.value("成功");

    }

}

结果为:Hefei

xianfan

此时,super.name返回的值是父类成员变量的值xianfan,而此时的super.value()方法是不起作用的。

3、用super直接传递参数:

class Person {

    public static void prt(String s) {

        System.out.println(s);

    }

 

    Person() {

        prt("A Person.");

    }

 

    Person(String name) {

        prt("A person name is:" + name);

    }

}

 

public class Chinese extends Person {

    Chinese() {

        super(); // 调用父类构造函数(1)

        prt("A chinese.");// (4)

    }

 

    Chinese(String name) {

        super(name);// 调用父类具有相同形参的构造函数(2)

        prt("his name is:" + name);

    }

 

    Chinese(String name, int age) {

        this(name);// 调用当前具有相同形参的构造函数(3)

        prt("his age is:" + age);

    }

 

    public static void main(String[] args) {

        Chinese cn = new Chinese();

        cn = new Chinese("kevin");

        cn = new Chinese("kevin", 22);

    }

}

结果为:A Person.

A chinese.

A person name is:kevin

his name is:kevin

A person name is:kevin

his name is:kevin

his age is:22

在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。

java中super的两种用法

通过用static来定义方法或成员 为我们编程提供了某种便利 从某种程度上可以说它类似于C语言中的全局函数和全局变量

但是 并不是说有了这种便利 你便可以随处使用 如果那样的话 你便需要认真考虑一下自己是否在用面向对象的思想编程 自己的程序是否是面向对象的

好了 现在开始讨论thissuper这两个关键字的意义和用法

在Java中 this通常指当前对象 super则指父类的

当你想要引用当前对象的某种东西 比如当前对象的某个方法 或当前对象的某个成员 你便可以利用this来实现这个目的 当然 this的另一个用途是调用当前对象的另一个构造函数 这些马上就要讨论

如果你想引用父类的某种东西 则非super莫属

由于this与super有如此相似的一些特性和与生俱来的某种关系 所以我们在这一块儿来讨论 希望能帮助你区分和掌握它们两个

在一般方法中

最普遍的情况就是 在你的方法中的某个形参名与当前对象的某个成员有相同的名字 这时为了不至于混淆 你便需要明确使用this关键字来指明你要使用某个成员 使用方法是 this 成员名 而不带this的那个便是形参 另外 还可以用 this 方法名 来引用当前对象的某个方法 但这时this就不是必须的了 你可以直接用方法名来访问那个方法 编译器会知道你要调用的是那一个 下面的代码演示了上面的用法

public class DemoThis{

private String name;

private int age;

DemoThis(String name int age){

setName(name);

//你可以加上this来调用方法 像这样 this setName(name);但这并不是必须的

setAge(age);

this print(); br }

public void setName(String name){

this name=name;//此处必须指明你要引用成员变量

}

public void etAge(int age){

this age=age;

}

public void print(){

System out println( Name= +name+ ge= +age);

//在此行中并不需要用this 因为没有会导致混淆的东西

}

public static void main(String[] args){

DemoThis dt=new DemoThis( Kevin );

这段代码很简单 不用解释你也应该能看明白 在构造函数中你看到用this print()

你完全可以用print()来代替它 两者效果一样 下面我们修改这个程序 来演示super的用法

class Person{

public int c;

private String name;

private int age;

protected void setName(String name){

this name=name;

}

protected void setAge(int age){

this age=age;

}

protected void print(){

System out println( Name= +name+ Age= +age);

}

}

public class DemoSuper extends Person{

public void print(){

System out println( DemoSuper: );

super print();

}

public static void main(String[] args){

DemoSuper ds=new DemoSuper();

ds setName( kevin );

ds setAge( );

ds print();

}

}

在DemoSuper中 重新定义的print方法覆写了父类的print方法

它首先做一些自己的事情 然后调用父类的那个被覆写了的方法 输出结果说明了这一点

DemoSuper:

Name=kevin Age=

这样的使用方法是比较常用的 另外如果父类的成员可以被子类访问 那你可以像使用this一样使用它 用 super 父类中的成员名 的方式 但常常你并不是这样来访问父类中的成员名的

在构造函数中构造函数是一种特殊的方法 在对象初始化的时候自动调用

在构造函数中 this和super也有上面说的种种使用方式 并且它还有特殊的地方 请看下面的例子

class Person{

public static void prt(String s){

System out println(s);

}

Person(){

prt( A Person );

}

Person(String name){

prt( A person name is: +name);

}

}

public class Chinese extends Person{

Chinese(){

super(); //调用父类构造函数( )

prt( A chinese );//( )

}

Chinese(String name){

super(name);//调用父类具有相同形参的构造函数( )

prt( his name is: +name);

}

Chinese(String name int age){

this(name);//调用当前具有相同形参的构造函数( )

prt( his age is: +age);

}

public static void main(String[] args){

Chinese cn=new Chinese();

cn=new Chinese( kevin );

cn=new Chinese( kevin );

}

}

在这段程序中 this和super不再是像以前那样用 连接一个方法或成员 而是直接在其后跟上适当的参数 因此它的意义也就有了变化 super后加参数的是用来调用父类中具有相同形式的构造函数 如 和 处 this后加参数则调用的是当前具有相同参数的构造函数 如 处 当然 在Chinese的各个重载构造函数中 this和super在一般方法中的各种用法也仍可使用 比如 处 你可以将它替换为 this prt (因为它继承了父类中的那个方法)或者是 super prt (因为它是父类中的方法且可被子类访问) 它照样可以正确运行 但这样似乎就有点画蛇添足的味道了

最后 写了这么多 如果你能对 this通常指代当前对象 super通常指代父类 这句话牢记在心 那么本篇便达到了目的 其它的你自会在以后的编程实践当中慢慢体会 掌握 另外关于本

lishixinzhi/Article/program/Java/hx/201311/25875

java 中super 的用法及意义

java中的super指的就是父类(super class)\x0d\x0a例:B继承A\x0d\x0aA类\x0d\x0aclass A {\x0d\x0a private String astr;\x0d\x0a private String bstr;\x0d\x0a public A(string astr, string bstr) {\x0d\x0a this.astr = astr; //this指的是本类,在这里就是A\x0d\x0a this.bstr = bstr;\x0d\x0a }\x0d\x0a \x0d\x0apublic String getAstr() {\x0d\x0a return this.astr;\x0d\x0a}\x0d\x0a\x0d\x0apublic String getBstr() {\x0d\x0a return this.bstr;\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aB类\x0d\x0aclass B extends A {\x0d\x0a private String aa;\x0d\x0a private String bb;\x0d\x0a \x0d\x0a public B(String aa, String bb) {\x0d\x0a super(aa, bb); //这里就调用了父类的构造方法,给父类的super.astr,super.bstr(super.astr也就是父类的astr变量,super.bstr同理)两个变量赋值了,而不是给this.aa,this.bb(this.aa可以理解为本类的aa变量,this.bb同理)赋值\x0d\x0a // this.aa = aa; \x0d\x0a // this.bb = bb;\x0d\x0a } \x0d\x0a \x0d\x0apuplic String getAA() {\x0d\x0a return this.aa;\x0d\x0a}\x0d\x0a\x0d\x0apublic String getBB() {\x0d\x0a return this.bb;\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a测试类\x0d\x0apublic class Test {\x0d\x0a public static void main(String[] args) {\x0d\x0a B b = new B("aabb", "ccdd"); // 调用B的构造方法,给super.astr,super.bstr赋值了\x0d\x0a System.out.println(b.getAa()); // null 没有被赋值\x0d\x0a System.out.println(b.getBb()); // null\x0d\x0a System.out.println(b.getAstr()); // aabb 调用父类的方法,返回super.astr的值\x0d\x0a System.out.println(b.getAstr()); // ccdd 调用父类的方法,返回super.bstr的值\x0d\x0a }\x0d\x0a}

javasuper引用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javasuper函数、javasuper引用的信息别忘了在本站进行查找喔。