JAVA面向对象-子父类中变量,函数和构造函数的特点

子父类中,类成员的特点

类中的成员
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 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hepengke/p/6955128.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值