零EVA

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

子父类中,类成员的特点

类中的成员
1 变量

如果子类中出现非私有的同名成员变量时
子类要访问本类中的变量,用this
子类要访问父类中的变量,用super
this表示的是本类对象的引用
super表示的是父类对象的引用

2 函数

当子类出现和父类一模一样的函数的时候
当子类对象调用该函数,会运行子类函数的内容
如同父类的函数被覆盖一样
上述就是函数的一个特性,重写(覆盖)

当子类继承父类,沿袭了父类的功能到子类中,
但是子类虽然具备该功能,但功能内容和父类不一致
这时,没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容

注意:
1 子类覆盖父类,子类权限大于等于父类权限,才可以覆盖,否则编译失败
2 静态只能覆盖静态

3 构造函数

 

创建子类对象的时候先创建父类对象
对子类对象进行初始化的时候,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式语句 super()
super():会访问父类中构造函数(不指定状态下是访问空参数构造函数),而且子类中所有的构造函数默认第一行都是super()

为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获取。所以子类对象建立时,需要查看父类对父类数据初始化的
所以子类在对象初始化时要先访问父类的构造函数

//extends
class Father
{
    int num = 4;
    
    Father()
    {
        System.out.println("Father run");
    }
    
    Father(int x)
    {
        System.out.println("Father run "+x);
    }
    
    void speak1()
    {
        System.out.println("vb");
    }
}
class Son extends Father
{
    int num = 5;
    
    Son()
    {
        //super();
        System.out.println("Son run");
    }
    
    Son(int x)
    {
        //super();
        //super(4);
        System.out.println("Son run "+x);
    }
    
    void showFather()
    {
        System.out.println(super.num);//super代表父类对象的引用
    }
    
    void showSon()
    {
        System.out.println(this.num);
    }
    
    void speak()//覆盖
    {
        System.out.println("java");
    }
}
class ExtendsDemo
{ 
    public static void main(String[] args)
    {
        //Son son = new Son();
        Son son = new Son(4);
        //son.showSon();
        //son.showFather();
        son.speak();
    }
}

 

posted on 2017-06-07 16:56  零EVA  阅读(347)  评论(0编辑  收藏  举报