继承-super限定

来源:互联网 发布:手机淘宝怎么用集分宝 编辑:程序博客网 时间:2024/05/22 01:29

  源代码1:

class Experiment1{    public int c=10;}class Experiment2 extends Experiment1{    public int a=5;}public class Java1 extends Experiment2{    public void java1_System(){        System.out.println(a);        System.out.println(c);    }    public static void main(String[] args) {        Java1 b=new Java1();        b.java1_System();    }    }
运行结果:



源代码2:

class Experiment{    public String a="java";}class Experiment2 extends Experiment{    private String a="C++";}public class Java2 {    public static void main(String[] args) {        Experiment2 b=new Experiment2();        //System.out.println(b.a);        System.out.println(((Experiment)b).a);    }    }


运行结果:


  1.super限定的作用是在子类中引用父类中被覆盖的实例方法;

  2.super用于限定该对象调用它从父类继承得到的实例变量或方法;与this一样,super不能出现在有static修饰的方法中,因为有static修饰的方法是属于类的,而类一般是直接地由类来引用,而非是由对象,这样就与super的定义相驳了;

  3.super关键字只能用于在子类的方法中引用父类被覆盖的实例变量或方法,注意只能在子类的方法中引用,在其他的地方引用都不行;

  4.如果在子类定义一个与父类同名的实例变量,则会发生子类实例变量隐藏父类实例变量,注意这里只是隐藏了;

  5.如果子类中没有存在与父类相同的实例变量,那么调用父类中的实例变量则无需使用super,检索这个实例变量的顺序为:该方法--->当前类--->父类--->编译报错; 

  6.由源代码1可得:①.程序不经会为本类中的实例变量创建内存,还会为父类中的实例变量创建内存,而且这个实例变量属于的是本类,该实例变量的值等于父类中实例变量的值;②.一个类虽然只可以有一个直接父类,但是可以有很多个间接父类;

  7.由源代码2可得:假若注释的语句作为一个语句放入该源代码中,那么系统会编译错误,因为Experiment2中的b实例变量的修饰符为private,是不能被其他类访问的,假使要在Java2中访问Experiment类中的a,那么只能强行转换实例b的类型;(当然也可以在Experiment2定义一个方法    public void Out(){System.out.println(super.a); }也能实现同样的目的)

0 0