欢迎光临散文网 会员登陆 & 注册

super在继承树中的用法

2022-06-15 21:14 作者:虚云幻仙  | 我要投稿

/**
* 测试super的用法 在子类中调用父类的内容
* 继承树追溯
*/

public class TestSuper {
   int age;
   public void set(){
       age = 100;
       System.out.println("TestSuper的age="+age);
   }
}

class T2 extends TestSuper{
   int age;
   //重写age
   public void set(){
       age = 200;
       super.set();
       //调用父类TestSuper的方法set()
       System.out.println(super.age);
       //调用父类TestSuper的属性age
       System.out.println("T2的age="+age);

        //子类重写age之后 子类生成的对象.age遮住了父类的属性age 但父类age没有改变依然存在
   }

   public static void main(String[] args) {
       new T2().set();
       //new对象并直接使用方法set()
       T2 t = new T2();
       //在子类以外的地方无法使用super.调用父类
   }
}

class T3{
   TestSuper t = new TestSuper();
   int age;
   //组合component TestSuper.age和T3对象名.age不影响 可在子类之外分别调用
   public void set(){
       System.out.println();
   }

   public static void main(String[] args) {
       T3 tt = new T3();
       tt.age = 100;
       tt.t.age = 200;
       tt.set();
       tt.t.set();
   }
}

class T4{
   T4(){
       //构造方法第一行默认 Super();
       System.out.println("创建父类");
   }
   T4(int a){
       System.out.println(a);
   }
}
class T5 extends T4{
   T5(){
       //构造方法第一行默认 Super();
       System.out.println("创建子类");
   }

   public static void main(String[] args) {
       new T5();
       //创建类时从父类往下逐一创建 Object>T4>T5
   }
}
class T6 extends T4{
   T6(){
       super(100);
       //手动设定有参构造方法 不会生成默认super()
   }
   T6(int b){
       this();
       //调用无参构造方法T6()
       System.out.println(b);
   }
   T6(int b,int c){
       this(b);
       System.out.println(c);
   }

   public static void main(String[] args) {
       new T6();
       //Object>T4(100)>T6 没有用到T4()不打印创建父类
       new T6(2,3);
   }
}

class T7{
   static {
       System.out.println("加载父类时会加载静态初始化块,所以只要使用父类就会打印出这句话");
   }
   T7(){
       System.out.println("static随类一起加载,先于构造方法");
   }
}
class T8 extends T7{
   static {
       System.out.println("子类后加载");
   }
   T8(){
       System.out.println("后");
   }
}

class T9{
   public static void main(String[] args) {
       T8 t  = new T8();
       //顺序T7static静态初始化块>T8static>T7()构造方法>T8()
   }
}

super在继承树中的用法的评论 (共 条)

分享到微博请遵守国家法律