美文网首页
4.3 super关键字

4.3 super关键字

作者: 姗婷 | 来源:发表于2020-05-12 20:44 被阅读0次

super的使用和this的使用几乎一致
this代表本类应用,super代表父类引用
如果子父类中出现非私有同名成员变量时,子类要访问本类中的变量,用this,子类要访问父类中的同名变量,用super;
this代表的是本类对象的引用super代表的是父类对象的引用
子父类出现后,类成员的特点:
类中成员:1.变量,2.函数,3.构造函数

4.3.1.变量

class Fu
{
    int num = 4;
    public void setNum(int num)
    {
        this.num = num;
    }
    public int getNum()
    {
        return this.num;
    }
}
class Zi extends Fu
{
    int num = 5;
    void show()
    {
        System.out.println(super.num);//子类要访问父类中的同名变量,用super
    }
}
class ExtendsDemo2
{
    public static void main(String[] args)
    {
        Zi z = new Zi();
        z.show();//结果是4
        //System.out.println(z.num +"...."+z.num);
    }   
}

4.3.2.子类中的函数

当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样
这种情况是函数的另一个特性:重载(覆盖)
当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽具备该功能,但是功能的内容却和父类不一致,
这时,没必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容

覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2.静态只能覆盖静态。private 、public、啥也不写默认权限
记住:
重载:只看同名函数的参数列表
重写,子父类方法要一模一样

class Fu
{
    void show()
    {
        System.out.println("fu show");
    }
    void speak()
    {
        System.out.println("vb");
    }
}
class Zi extends Fu
{
    void show()
    {
        System.out.println("zi show");
    }
    void speak()
    {
        System.out.println("java");
    }
}
class ExtendsDemo3
{
    public static void main(String[] args)
    {
        Zi z = new Zi();
        //z.show();
        z.speak();
    }   
}

class Tel
{
    void show()
    {
        System.out.println("number");
    }
}
class NewTel extends Tel
{
    void show()
    {
        //System.out.println("number");
        super.show();
        System.out.println("name");
        System.out.println("pic");
    }
}

4.3.3.子类中的构造函数

在对子类进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行由一条隐式的语句super();
super();会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类的构造函数?
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类时如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问下父类的构造函数。如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定

class Fu  //extends Object
{
    Fu()
    {
        System.out.println("Fu");
    }
    Fu(int x)
    {
    
        System.out.println("FU...."+x)
    }
}
class Zi extends Fu
{
    Zi()
    {
        //super();省略了super();
        System.out.println("zi run");
    }
    Zi(int x)
    {
        //this();
            //super();//省略了super();
        System.out.println("zi...."+x);
    }
}
class Person
{
    private String name;
    Person(String name)
    {
        this.name = name;
    }
    void show(){}
}
class Student extends Person
{
    Student(String name)
    {
        super(name);//父类定义完的内容子类想要用,构造函数用super()
    }
    void method()
    {
        super.show();//一般函数用super.
    }
}
class ExtendsDemo4
{
    public static void main(String[] args)
    {
        Zi z1= new Zi(4);//输出fu,zi...+4
        Zi z = new Zi();//输出fu,zi
    }   
}

相关文章

网友评论

      本文标题:4.3 super关键字

      本文链接:https://www.haomeiwen.com/subject/kdnbnhtx.html