美文网首页
Java继承

Java继承

作者: MacroZH | 来源:发表于2018-05-04 12:04 被阅读0次

    1 父类使用子类属性问题

    一般来说子类可以使用父类非private定义的字段,但是父类是不能使用子类的字段的。
    例如定义一个父类SuperClass,一个子类SubClass,都拥有相同的字段name

    public class SuperClass {
    
        private String name="super";
    
        protected  void printName()
        {
    
            System.out.println(name);
        }
    
    }
    
    public class SubClass  extends SuperClass{
        private String name="sub";
    
        @Override
        protected  void printName()
        {
            System.out.println(name);
        }
    
        public  static void main(String[] args)
        {
            SubClass subClass=new SubClass();
            subClass.printName();
    
        }
    
    }
    

    子类复写父类printName方法。执行Main方法后打印如下:

    sub
    

    此时调用子类的printName()方法,输出子类的name字段。当注释掉子类复写方法pritName()时。

    public class SubClass  extends SuperClass{
        private String name="sub";
    
    //    @Override
    //    protected  void printName()
    //    {
    //        System.out.println(name);
    //    }
    
        public  static void main(String[] args)
        {
            SubClass subClass=new SubClass();
            subClass.printName();
    
        }
    }
    

    此时输出结果:

    super
    

    调用父类的printName()方法打印父类的name字段,但是有时候我们希望在父类中操作子类的字段。那么可以将字段的创建交给子类来完成。

    public abstract class SuperClass {
    
        private String name;
    
        public SuperClass( ) {
            name=createName();
        }
    
        protected  void printName()
        {
    
            System.out.println(name);
        }
    
        abstract protected  String createName();
    
    }
    
    
    
    public class SubClass  extends SuperClass{
        private String name;
        
        @Override
        protected String createName() {
            name="sub";
            return name;
        }
    
        public  static void main(String[] args)
        {
            SubClass subClass=new SubClass();
            subClass.printName();
    
        }
    
    }
    
    

    当创建subClass时候会执行SuperClass的构造函数,此时会调用createName()方法,执行subClass的createName()方法将子类的name引用返回交给父类。这时父类的name字段就指向子类的name字段。
    此时输出结果为:

    sub
    

    相关文章

      网友评论

          本文标题:Java继承

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