黑马程序员技术交流社区

标题: 子父类出现后,类成员的特点 [打印本页]

作者: yuchun    时间: 2015-7-27 18:06
标题: 子父类出现后,类成员的特点
子父类出现后,类成员的特点

1,变量
如果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this。       this代表的是本类对象的引用。
子类要访问父类中的同名变量,用super。  super代表的是父类对象的引用。
class Fu
{
        private 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(this.num);
                System.out.println(super.num);
        }
}

class  ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
        }
}

输出结果是:5 4。  Zi()类中this.num引用的是本类中的num=4,因为this代表的是本类对象的引用;super.numF引用的是Fu()类中的num=5,因为super代表的是父类对象的引用。


2,子父类中的函数。
当子类出现和父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容,这种情况是函数的另一个特性:重写(覆盖)。
覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。
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.speak();

        }
}

输出结果是:java    zi show





3,子父类中的构造函数。
在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句 super();super()会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super()。所以子类在对象初始化时,要先访问一下父类中的构造函数。

class Fu
{
        Fu()
        {
                System.out.println("fu run");
        }
}

class Zi extends Fu
{
        Zi()
        {
                System.out.println("zi run");
        }
}

class  ExtendsDemo4
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                System.out.println(z.num);
        }
}

输出结果是:fu run    zi run   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2